【Java实验报告】实验2 面向对象程序设计

一、实验目标

  1. 掌握根据实际需求设计Java类的方法;
  2. 掌握Java中继承的使用方法;
  3. 掌握Java中package的概念和使用方法;
  4. 掌握静态方法的定义和使用方法;
  5. 掌握Object类中equals方法和toString方法的重写方法。
  6. 掌握Java中抽象类和抽象方法的定义;
  7. 掌握Java中接口的定义,熟练掌握接口的定义形式以及接口的实现方法。
  8. 熟练掌握Java中一维数组、多维数组的使用方法,能够使用Java数组解决一般性的应用问题。

二、实验内容

设计一个教师类Teacher(属于cn.net.sdkd包),要求:
  1. 属性有编号(int no)、姓名(String name)、年龄(int age)、所属学院(String seminary),为这些属性设置相应的get和set方法。
  2. 为Teacher类重写equals方法,要求:当两个教师对象的no相同时返回true。
  3. 重写Teacher类的toString方法,通过该方法可以返回“编号为**、姓名为**、年龄为学院老师”形式的字符串。
  4. 由多个Teacher对象所形成的数组可以以两种方法排序(编号由低到高排序):1)使用Arrays.sort(Object[] a)方法;2)使用Arrays.sort(Object[] a, Comparator c)方法。
  5. 再定义一个类TeacherManagement(属于cn.sd包),提供方法search,方法可以在一组给定的教师中,根据姓名(或年龄)返回等于指定姓名(或年龄)的教师的字符串信息,信息格式为:“编号为**、姓名为**、年龄为学院老师”。如果没有满足条件的教师,则返回“没有符合条件的教师”。
  6. 构造main方法进行测试。
package cn.net.sdkd;

public class Teacher implements Comparable{
    public int no;
    public String name;
    public int age;
    public String seminary;
    public void setNo(int no){
        this.no=no;
    }
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public void setSeminary(String seminary){
        this.seminary=seminary;
    }
    public int getNo(){
        return no;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public String getSeminary(){
        return seminary;
    }
    public boolean equals(Teacher a,Teacher b){
        return a.no==b.no;
    }
    public String toString(){
        return "编号为"+no+"、姓名为"+name+"、年龄为"+age+"的"+seminary+"学院老师";
    }

    @Override
    public int compareTo(Object o) {
        Teacher p=(Teacher)o;
        return this.no-p.no;
    }
}

package cd.sd;

import cn.net.sdkd.Teacher;

import java.util.List;

public class TeacherManagement {
    public static void search(String name, List<Teacher> list1){
        boolean flag=true;
        for(int i=0;i<list1.size();++i){
            Teacher tmp=list1.get(i);
            if(name.equals(tmp.name)){
                System.out.println(tmp.toString());
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.println("没有符合条件的教师");
        }
    }
    public static void search(int age, List<Teacher>list1){
        boolean flag=true;
        for(int i=0;i<list1.size();++i){
            Teacher tmp=list1.get(i);
            if(age==tmp.age){
                System.out.println(tmp.toString());
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.println("没有符合条件的教师");
        }
    }
}

package test;

import cd.sd.TeacherManagement;
import cn.net.sdkd.Teacher;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Teacher teacher1 = new Teacher();
        teacher1.no=123;
        teacher1.name="sss";
        teacher1.age=123;
        teacher1.seminary="ssss";
        Teacher teacher2=new Teacher();
        teacher2.no=111;
        teacher2.name="sssss";
        teacher2.age=111;
        teacher2.seminary="aaa";
        List<Teacher>list1=new ArrayList<Teacher>();
        list1.add(teacher1);
        list1.add(teacher2);
        Collections.sort(list1);
        System.out.println(list1);
        TeacherManagement.search(121,list1);
        sc.close();
    }
}

  1. 设计一个带表头的双向链表(链表中数据的具体类型可以随意),提供以下方法:(1)insert:在某个位置插入对象;(2)insert:在链表的最后插入对象;(2)delete:在某个位置删除对象;(3)delete:删除链表中与x相同的元素;(4)size:返回当前链表中对象的个数;(5)isEmpty:判断链表是否为空;(6)traverse:遍历链表,打印出所有的元素;(7)getData:取得某个位置的对象。构造main函数进行测试。
    关于插入与删除的细节参考这篇博客
package test;

import java.util.Scanner;
class MyList {
    class Node {
        int data;
        Node front;
        Node next;

        public Node() {
            data = 0;
            front = null;
            next = null;
        }

        public Node(int data, Node front, Node next) {
            this.data = data;
            this.front = front;
            this.next = next;
        }
    }
    public int size;
    public Node head;
    public Node cur;
    public MyList(){
        this.size=0;
        head=new Node();
        cur=new Node(0,head,null);
        head.next=cur;
    }
    public void insert(int x){
        Node tmp=new Node(x,null,null);
        tmp.front=cur.front;
        cur.front.next=tmp;
        tmp.next=cur;
        cur.front=tmp;
        size++;
    }
    public void delete(int index){
        Node tmp=head;
        tmp=tmp.next;
        int cnt=1;
        while(cnt<index){
            tmp=tmp.next;
            cnt++;
        }
        tmp.front.next=tmp.next;
        tmp.next.front=tmp.front;
        size--;
    }
    public void deleteall(int x){
        Node tmp=head.next;
        //int num=size;
        while(true){
            Node tmp2=tmp.next;
            if(tmp.data==x){
                tmp.front.next=tmp.next;
                tmp.next.front=tmp.front;
                size--;
            }
            tmp=tmp2;
            if(tmp2==null)break;
        }
    }
    public int getData(int index){
        Node tmp=head;
        tmp=tmp.next;
        int cnt=1;
        while(cnt<index){
            tmp=tmp.next;
            cnt++;
        }
        return tmp.data;
    }
    public boolean isEmpty(){
        if(size>0)return true;
        else return false;
    }
    public void treverse(){
        Node tmp=head.next;
        while(tmp.next!=null){
            System.out.println(tmp.data);
            tmp=tmp.next;
        }
    }
}
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        MyList list1 = new MyList();
        for(int i=1;i<=3;++i){
            list1.insert(i);
        }
        //list1.delete(2);
        //System.out.println(list1.size);
        list1.insert(1);
        list1.deleteall(1);
        System.out.println(list1.isEmpty());
        list1.treverse();
/*        for(int i=1;i<=2;++i){
            System.out.println(list1.getData(i));
        }*/
        sc.close();
    }
}


  1. 使用一维数组编码实现一个栈(Stack)类,要求提供以下操作:(1)boolean isEmpty():判断栈当前是否为空;(2)入栈操作void push(obj):把数据元素obj插入堆栈;(3)出栈操作Object pop():出栈,并返回删除的数据元素;(4)Object getTop():取堆栈当前栈顶的数据元素并返回;(5)利用Stack类实现一个方法:输入一个正整数,输出该整数所对应的二进制数。
package test;

import java.util.Scanner;
class Stack{
    private int top;
    private int size;
    private Object []a;
    int n=2;
    public Stack(){
        top=-1;
        size=10;
        a=new Object[size];
    }
    public boolean isEmpty(){
        return top==-1;
    }
    public void push(Object x){
        if(top==size-1){
            Object []newa = new Object[a.length*n];
            System.arraycopy(a,0,newa,0,a.length);
            a=newa;
        }
        a[++top]=x;
    }
    public Object pop(){
        Object o=a[top];
        a[top--]=null;
        return o;
    }
    public Object getTop(){
        return a[top];
    }
}
public class Main{
    static void getbite(int x){
        Stack s = new Stack();
        while(true){
            if(x<1)break;
            s.push(x%2);
            x/=2;
        }
        while(!s.isEmpty()){
            System.out.print(s.pop());
        }
        System.out.println();
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Stack aa = new Stack();
        aa.push(1);
        aa.push(2);
        System.out.println(aa.getTop());
        getbite(2);
        System.out.println(aa.pop());
        sc.close();
    }
}
  1. 利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width():返回矩阵的列数;(4)height():返回矩阵的行数;(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的矩阵;(6)Matrix multiply(Matrix b):返回当前矩阵与矩阵b相乘后的矩阵。(7)Matrix transpose():返回当前矩阵的转置矩阵;(8)getMax():返回矩阵中的最大值及其所在行和列;(9)print():以行和列的形式打印出当前矩阵。
package test;

public class Matrix {
    private double [][]a;
    private int row,col;

    public Matrix(int row, int col) {
        this.row = row;
        this.col = col;
        a=new double[row][col];
    }
    public void set(int i,int j,double val){
        a[i][j]=val;
    }
    public double get(int i,int j){
        return a[i][j];
    }
    public int width(){
        return col;
    }
    public int height(){
        return row;
    }
    public Matrix add(Matrix b){
        Matrix matrix = new Matrix(row,col);
        for(int i=0;i<row;++i){
            for(int j=0;j<col;++j){
                matrix.a[i][j]=this.a[i][j]+b.a[i][j];
            }
        }
        return matrix;
    }
    public Matrix multiply(Matrix b){
        Matrix matrix = new Matrix(row, col);
        for(int i=0;i<row;++i){
            for(int j=0;j<col;++j){
                double sum=0;
                for(int i1=0;i1<row;++i1){
                    for(int j1=0;j1<col;++j1){
                        sum=sum+this.a[i1][j1]*b.a[j1][i1];
                    }
                }
                matrix.a[i][j]=sum;
            }
        }
        return matrix;
    }
    public Matrix transpose(Matrix b){
        Matrix matrix= new Matrix(b.col, b.row);
        for(int i=0;i<b.row;++i){
            for(int j=0;j<b.col;++j){
                matrix.a[j][i]=b.a[i][j];
            }
        }
        return matrix;
    }
    public void getMax(){
        int r=0,c=0;
        double maxx=this.a[0][0];
        for(int i=0;i<row;++i)
            for(int j=0;j<col;++j){
                if(this.a[i][j]>maxx){
                    r=i;c=j;maxx=a[i][j];
                }
            }
        System.out.println(r+" "+c+" "+maxx);
    }
    public void print(){
        for(int i=0;i<row;++i){
            for(int j=0;j<col;++j)
                System.out.print(a[i][j]+" ");
            System.out.println();
        }
    }
}

package test;

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Matrix matrix = new Matrix(3, 2);
        for(int i=0;i<3;++i)
            for(int j=0;j<2;++j)
                matrix.set(i,j,i+j);
        matrix.print();
        matrix.transpose(matrix).print();
        Matrix matrix1 = new Matrix(3, 2);
        for(int i=0;i<3;++i)
            for(int j=0;j<2;++j)
                matrix1.set(i,j,i+j);
        matrix.add(matrix1).print();
        matrix.multiply(matrix1.transpose(matrix1)).print();
        matrix.getMax();
        sc.close();
    }
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序设计》课程实验指导书程序代码(答案)(实验二),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 二、实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。(闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.编写Java Appet 程序打印 “水仙花” 数 (它的个、十、百位数字的立方的和等于该数本身,如:153=1^3+5^3+3^3) 3. 编写Java Application程序,分别用do-while和for循环计算1+1/2!+1/3!+1/4!...的前20项和 三、实验要求: 1. 正确使用Java语言的选择语句,循环语句; 2. 调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[ ] args)方法中加入实现要求功能的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第二题)编写Java Applet, 在public void paint(Graphics g)方法中加入实现要求功能的代码, 主要步骤是:从100到1000循环,判断每个数是否符合水仙花数的特点,是则输出之。 3.编译运行程序,观察输出结果是否正确。 五、自做实验 1. 输出100以内的所有素数。 提示: 逐个判断小于a的每个正整数x,第二重循环针对x,判断其是否是质数。 2.将所输入之正整数,以二、八、十六进制表示出来。 提示: 可写三个方法分别计算输出二、八、十六进制表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值