7-11 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company

定义Person抽象类,Student类、Company类,Employee类。

Person类的属性String name, int age, boolean gender
Person类的方法:

public Person(String name, int age, boolean gender);
public String toString();         // 返回"name-age-gender"格式的字符串
public boolean equals(Object obj);// 比较name、age、gender,都相同返回true,否则返回false

Student类继承自Person,属性:String stuNo, String clazz
Student类的方法:

// 建议使用super复用Person类的相关有参构造函数
public Student(String name, int age, boolean gender, String stuNo, String clazz);
public String toString();         // 返回 “Student:person的toString-stuNo-clazz”格式的字符串
public boolean equals(Object obj); // 首先调用父类的equals方法,如果返回true,则继续比较stuNo与clazz。

Company类属性:String name
Company类方法:

public Company(String name);
public String toString();         // 直接返回name
public boolean equals(Object obj); // name相同返回true

Employee类继承自Person,属性:Company company, double salary
Employee类方法:

// 建议使用super复用Person类的相关有参构造函数
public Employee(String name, int age, boolean gender, double salary, Company company);
public String toString();         //返回"Employee:person的toString-company-salary"格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true。再比较company与salary。
// 比较salary属性时,使用DecimalFormat df = new DecimalFormat("#.#");保留1位小数

编写equals方法重要说明:

  1. 对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false
  2. 对所有String字符类型比较时,也要考虑null情况。

提示

  1. 排序可使用Collections.sort
  2. equals方法要考虑周全

main方法说明

  1. 创建若干Student对象、Employee对象。

    输入s,然后依次输入name age gender stuNo clazz创建Student对象
    输入e,然后依次输入name age gender salary company创建Employee对象
    然后将创建好的对象放入List<Person> personList。输入其他字符,则结束创建。
    说明: 对于String类型,如果为null则不创建对象,而赋值为null。对于company属性,如果为null则赋值为null,否则创建相应的Company对象。

  2. 对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable<Person>Comparator<Person>

  3. 接受输入,如果输入为exitreturn退出程序,否则继续下面步骤。

  4. 将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。

  5. 输出字符串stuList,然后输出stuList中的每个对象。

  6. 输出字符串empList,然后输出empList中的每个对象。

1-3为一个测试点
4-6为一个测试点

输入样例:

s zhang 23 false 001 net15
e wang 18 true 3000.51 IBM
s zhang 23 false 001 net15
e bo 25 true 5000.51 IBM
e bo 25 true 5000.52 IBM
e bo 18 true 5000.54 IBM
e tan 25 true 5000.56 IBM
e tan 25 true 5000.51 IBM
s wang 17 false 002 null
s wang 17 false 002 null
e hua 16 false 1000 null
s wang 17 false 002 net16
e hua 16 false 1000 null
e hua 18 false 1234 MicroSoft
!
continue

输出样例:

Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:bo-25-true-IBM-5000.52
Employee:hua-16-false-null-1000.0
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Student:wang-17-false-002-null
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Employee:wang-18-true-IBM-3000.51
Student:zhang-23-false-001-net15
Student:zhang-23-false-001-net15
stuList
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Student:zhang-23-false-001-net15
empList
Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Employee:wang-18-true-IBM-3000.51

实现代码:

import java.text.DecimalFormat;
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Person> list = new ArrayList<>();
        while (true){
            String str = sc.next();
            if(str.equals("s")){
                list.add(new Student(sc.next(),sc.nextInt(),sc.nextBoolean(),sc.next(),sc.next()));
            }else if(str.equals("e")){
                list.add(new Employee(sc.next(),sc.nextInt(),sc.nextBoolean(),sc.nextDouble(),new Company(sc.next())));
            }else {
                break;
            }
        }
        Collections.sort(list);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        String s = sc.next();
        if(s.equals("exit")) System.exit(0);
 
        List<Student> studentList = new ArrayList<>();
        List<Employee> employeeList = new ArrayList<>();
 
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i) instanceof Student){
                if(studentList.isEmpty()){
                    studentList.add((Student) list.get(i));
                }else if(!studentList.get(studentList.size()-1).equals(list.get(i))){
                    studentList.add((Student) list.get(i));
                }
            }else if(list.get(i) instanceof Employee){
                if(employeeList.isEmpty()){
                    employeeList.add((Employee) list.get(i));
                }else if(!employeeList.get(employeeList.size() - 1).equals(list.get(i))){
                    employeeList.add((Employee) list.get(i));
                }
            }
        }
        System.out.println("stuList");
        for (int i = 0; i < studentList.size(); i++) {
            System.out.println(studentList.get(i));
        }
        System.out.println("empList");
        for (int i = 0; i < employeeList.size(); i++) {
            System.out.println(employeeList.get(i));
        }
    }
}
 
abstract class Person implements Comparable<Person>{
 
    private String name;
    private int age;
    private boolean gender;
 
    public Person() {
    }
 
    public Person(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public boolean isGender() {
        return gender;
    }
 
    public void setGender(boolean gender) {
        this.gender = gender;
    }
 
    @Override
    public String toString() {
        return name +  "-" + age + "-" + gender;
    }
 
    @Override
    public boolean equals(Object obj){
        Person person = (Person) obj;
        if(person.name.equals(this.name) && person.age == this.age && person.gender == this.gender) return true;
        else return false;
    }
 
    @Override
    public int compareTo(Person o) {
        int temp = this.name.compareTo(o.name);
        return temp == 0 ? this.age - o.age : temp;
    }
}
 
class Student extends Person{
 
    private String stuNo;
    private String clazz;
 
    public Student() {
    }
 
    public Student(String stuNo, String clazz) {
        this.stuNo = stuNo;
        this.clazz = clazz;
    }
 
    public Student(String name, int age, boolean gender, String stuNo, String clazz) {
        super(name, age, gender);
        this.stuNo = stuNo;
        this.clazz = clazz;
    }
 
    @Override
    public String toString() {
        return "Student:" + getName() + "-" + getAge() + "-" + isGender() + "-" + stuNo + "-" + clazz;
    }
 
    @Override
    public boolean equals(Object obj){
        if(!super.equals(obj)){
            return false;
        }else {
            Student student = (Student) obj;
            if(student.stuNo.equals(this.stuNo) && student.clazz.equals(this.clazz)){
                return true;
            }else {
                return false;
            }
        }
    }
}
class Company{
 
    private String name;
 
    public Company() {
    }
 
    public Company(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return name;
    }
 
    @Override
    public boolean equals(Object obj){
        Company company = (Company) obj;
        if(company.name.equals(this.name)) return true;
        else return false;
    }
}
 
class Employee extends Person{
 
    private Company company;
    private double salary;
 
    public Employee() {
    }
 
    public Employee(Company company, double salary) {
        this.company = company;
        this.salary = salary;
    }
 
    public Employee(String name, int age, boolean gender, double salary,Company company) {
        super(name, age, gender);
        this.company = company;
        this.salary = salary;
    }
 
    @Override
    public String toString() {
        return "Employee:" + getName() + "-" + getAge() + "-" + isGender() + "-" + company.toString() + "-" + salary;
    }
 
    @Override
    public boolean equals(Object obj){
        if(!super.equals(obj)){
            return false;
        }else {
            Employee employee = (Employee) obj;
            DecimalFormat df = new DecimalFormat("#.#");
            if(employee.company.equals(this.company) && df.format(employee.salary).equals(df.format(this.salary))){
                return true;
            }else {
                return false;
            }
        }
    }
}

7-12 jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack

定义IntegerStack接口,用于声明一个存放Integer元素的栈的常见方法:

public Integer push(Integer item);
//如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。

public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
public Integer peek();  //获得栈顶元素,如果为空,则返回null.
public boolean empty(); //如果为空返回true
public int size();      //返回栈中元素个数

定义IntegerStack的实现类ArrayIntegerStack,内部使用数组实现。创建时,可指定内部数组大小。

main方法说明

  1. 输入n,建立可包含n个元素的ArrayIntegerStack对象
  2. 输入m个值,均入栈。每次入栈均打印入栈返回结果。
  3. 输出栈顶元素,输出是否为空,输出size
  4. 使用Arrays.toString()输出内部数组中的值。
  5. 输入x,然后出栈x次,每次出栈均打印。
  6. 输出栈顶元素,输出是否为空,输出size
  7. 使用Arrays.toString()输出内部数组中的值。

思考

如果IntegerStack接口的实现类内部使用ArrayList来存储元素,怎么实现?测试代码需要进行什么修改?

输入样例

5
3
1 2 3
2

输出样例

1
2
3
3,false,3
[1, 2, 3, null, null]
3
2
1,false,1
[1, 2, 3, null, null]

实现代码:

import java.util.Arrays;
import java.util.Scanner;

interface IntegerStack {
    public Integer push(Integer item); //如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item
    public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
    public Integer peek();  //获得栈顶元素,如果为空,则返回null
    public boolean empty(); //如果为空返回true
    public int size();      //返回栈中元素个数
}

class ArrayIntegerStack implements IntegerStack{
    private Integer[] arr;
    private int top = 0;

    public ArrayIntegerStack(int n){
        arr = new Integer[n];
        Arrays.fill(arr, null);
    }

    public ArrayIntegerStack(){}

    @Override
    public String toString() {
        return Arrays.toString(arr);
    }

    @Override
    public Integer push(Integer item) {
        if (item == null || arr.length == top){
            return null;
        }
        arr[top++] = item;
        return item;
    }

    @Override
    public Integer pop() {
        if (top == 0){
            return null;
        }
        return arr[--top];
    }

    @Override
    public Integer peek() {
        if (top == 0){
            return null;
        }
        return arr[top - 1];
    }

    @Override
    public boolean empty() {
        return top == 0;
    }

    @Override
    public int size() {
        return top;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        ArrayIntegerStack ais = new ArrayIntegerStack(n);
        int m = scanner.nextInt();
        while(m-- > 0){
            int item = scanner.nextInt();
            System.out.println(ais.push(item));
        }
        System.out.println(ais.peek() + "," + ais.empty() + "," + ais.size());
        System.out.println(ais);
        int x = scanner.nextInt();
        while(x-- > 0){
            System.out.println(ais.pop());
        }
        System.out.println(ais.peek() + "," + ais.empty() + "," + ais.size());
        System.out.println(ais);
    }
}

7-13 集体评分

程序填空题。请补充以下代码,完成题目要求。(注意:需要提交完整代码) 有一个团队由5个人组成。他们每个人给指导老师一个分数,去掉最高分,去掉最低分,剩下的3个分数的平均分就是该团队对指导老师的评分。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                int[] grade = new int[5];
                for(int i=0; i<grade.length; i++){
                      grade[i] = in.nextInt();
                 }

                RR rr = new RT(grade);
                double dd = rr.mark();
                System.out.printf("%.2f",dd);
    }
}
abstract class RR{
   int[] grade;
   public RR(int[] grade){
      this.grade = grade;
   }
   public abstract double mark();
}
class RT extends RR{

}

输入格式:

在一行中给出5个不超过10的正整数(从小到大排列)。

输出格式:

输出集体评分,保留小数点后两位。

输入样例:

1 2 4 6 9

输出样例:

4.00

实现代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] grade = new int[5];
        for(int i=0; i<grade.length; i++){
            grade[i] = in.nextInt();
        }
 
        RR rr = new RT(grade);
        double dd = rr.mark();
        System.out.printf("%.2f",dd);
    }
}
abstract class RR{
    int[] grade;
    public RR(int[] grade){
        this.grade = grade;
    }
    public abstract double mark();
}
class RT extends RR{
    public RT(int[] grade) {
        super(grade);
    }
 
    @Override
    public double mark() {
        double sum=0;
        for (int i=1;i<grade.length-1;i++){
            sum+=grade[i];
        }
        return sum/3;
    }
}

7-14 集体评分2

程序填空题。请补充以下代码,完成题目要求。(注意:需要提交完整代码) 有一个团队由5个人组成。他们每个人给指导老师一个分数,去掉最高分,去掉最低分,剩下的3个分数的平均分就是该团队对指导老师的评分。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                int[] grade = new int[5];
                for(int i=0; i<grade.length; i++){
                      grade[i] = in.nextInt();
                 }

                RR rr = new RT(grade);
                double dd = rr.mark();
                System.out.printf("%.2f",dd);
    }
}
interface RR{
   double mark();
}
class RT implements RR{
   int[] grade;
   public RT(int[] grade){
      this.grade = grade;
   }
}

输入格式:

在一行中给出5个不超过10的正整数(从小到大排列)。

输出格式:

输出集体评分,保留小数点后两位。

输入样例:

1 2 4 6 9

输出样例:

4.00

实现代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] grade = new int[5];
        for(int i=0; i<grade.length; i++){
            grade[i] = in.nextInt();
        }
 
        RR rr = new RT(grade);
        double dd = rr.mark();
        System.out.printf("%.2f",dd);
    }
}
interface RR{       //接口在 Java 中是一种特殊的抽象类型,它只包含抽象方法和常量
    double mark();  //这个接口的作用是为实现它的类定义了一个必须提供的方法规范,任何实现了RR接口的类都必须实现mark()方法
}
class RT implements RR{
    int[] grade;
    public RT(int[] grade){
        this.grade = grade;
    }
    @Override   //复写修改方法
    public double mark(){
        int min = grade[0];   //关于从数组中找出最大值最小值的方法
        int max = grade[0];
        int sum = grade[0];
        for(int i=1;i<grade.length;i++){
            sum += grade[i];
            if(min > grade[i])
                min = grade[i];
            if(max < grade[i])
                max = grade[i];
        }
        return (sum-max-min)/(grade.length-2);
    }
}

7-15 程序改错题2

程序改错题。以下代码存在错误,请修改后提交。

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.shout();
        animal.run();
    }
}

class Animal {
    void shout() {
        System.out.println("animal shout!");
    }
}

class Dog extends Animal {
    void shout() {
        super.shout();
        System.out.println("wangwang……");
    }

    void run() {
        System.out.println("Dog is running");
    }
}

输入格式:

输出格式:

输入样例:

输出样例:

animal shout!
wangwang……
Dog is running

实现代码:

public class Main {
	public static void main(String[] args) {
		Animal animal = new Dog();
		animal.shout();
		animal.run();
	}
}

class Animal {
	void shout() {
		System.out.println("animal shout!");
	}
	void run (){
	}
}

class Dog extends Animal {
	void shout() {
		super.shout();
		System.out.println("wangwang……");
	}

	void run() {
		System.out.println("Dog is running");
	}
}

7-16 jmu-Java-05集合-01-ListIntegerStack

定义IntegerStack接口,该接口描述了一个存放Integer的栈的常见方法:

public Integer push(Integer item); // 如item为null,则不入栈直接返回null。否则直接入栈,然后返回item。
public Integer pop(); // 出栈,如栈为空,则返回null。
public Integer peek(); // 获得栈顶元素,如栈顶为空,则返回null。注意:不要出栈
public boolean empty(); // 如果栈为空返回true
public int size();  // 返回栈中元素数量

定义IntegerStack的实现类ArrayListIntegerStack,内部使用ArrayList存储。该类中包含:

构造方法:
在无参构造方法中新建ArrayList或者LinkedList,作为栈的内部存储。
思考:查询JDK文档,尝试说明本题到底使用哪个List实现类最好。

方法:
public String toString() //用于输出List中的内容,可直接调用List的toString()方法。可用System.out.println(list)进行输出。

提示:

  1. 不建议使用top指针。最好直接复用List实现类中已有的方法。
  2. pop时应将相应的元素从列表中移除。

main方法说明

  1. 建立ArrayListIntegerStack对象
  2. 输入m个值,均入栈。每次入栈均打印入栈返回结果。
  3. 输出: 栈顶元素,输出是否为空,然后输出size.
  4. 输出栈中所有元素(调用其toString()方法)
  5. 输入x,然后出栈x次,每次均打印出栈的对象。
  6. 输出:栈顶元素,输出是否为空,输出size。注意:这里的输出栈顶元素,仅输出、不出栈。
  7. 输出栈中所有元素(调用其toString()方法)。注意:返回null,也要输出。

思考:

如果使用LinkedList来实现IntegerStack,怎么实现?测试代码需要进行什么修改?

输入样例

5
1 3 5 7 -1
2

输出样例

1
3
5
7
-1
-1,false,5
[1, 3, 5, 7, -1]
-1
7
5,false,3
[1, 3, 5]

实现代码:

import java.util.LinkedList;
import java.util.Scanner;

interface IntegerStack {
    public Integer push(Integer item); //如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item
    public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
    public Integer peek();  //获得栈顶元素,如果为空,则返回null
    public boolean empty(); //如果为空返回true
    public int size();      //返回栈中元素个数
}

class ArrayListIntegerStack implements IntegerStack{
    private LinkedList<Integer> list;

    public ArrayListIntegerStack(){
        list = new LinkedList<>();
    }

    public LinkedList<Integer> getList() {
        return list;
    }

    @Override
    public Integer push(Integer item) {
        if (item == null){
            return null;
        }
        list.add(item);
        return item;
    }

    @Override
    public Integer pop() {
        if (list.size() == 0){
            return null;
        }
        int topNum = list.getLast();
        list.removeLast();
        return topNum;
    }

    @Override
    public Integer peek() {
        if (list.size() == 0){
            return null;
        }
        return list.getLast();
    }

    @Override
    public boolean empty() {
        return list.size() == 0;
    }

    @Override
    public int size() {
        return list.size();
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayListIntegerStack alis = new ArrayListIntegerStack();
        int m = scanner.nextInt();
        while(m-- > 0){
            int item = scanner.nextInt();
            System.out.println(alis.push(item));
        }
        System.out.println(alis.peek() + "," + alis.empty() + "," + alis.size());
        System.out.println(alis.getList());
        int x = scanner.nextInt();
        while(x-- > 0){
            System.out.println(alis.pop());
        }
        System.out.println(alis.peek() + "," + alis.empty() + "," + alis.size());
        System.out.println(alis.getList());
    }
}

7-17 接口--四则计算器

  • 利用接口做参数,写个计算器,能完成加减乘除运算。
  1. 定义一个接口ICompute含有一个方法int computer(int n, int m)。
  2. 定义Add类实现接口ICompute,实现computer方法,求m,n之和
  3. 定义Sub类实现接口ICompute,实现computer方法,求n-m之差
  4. 定义Main类,在里面输入两个整数a, b,利用Add类和Sub类的computer方法,求第一个数a和第二个数b之和,输出和,第一个数a和第二个数b之差,输出差。

输入格式:

输入在一行中给出2个整数

输出格式:

输出两个数的和、差

输入样例:

在这里给出一组输入。例如:

6 7

输出样例:

在这里给出相应的输出。例如:

13
-1

实现代码:

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int m=in.nextInt();
		Add l=new Add();
		Sub j=new Sub();
		System.out.println(l.computer(n, m));
		System.out.println(j.computer(n, m));
		
		in.close();

	}

}
interface IComputer{
	abstract public int computer(int n ,int m);
}
class Add implements IComputer
{
	int m,n;
	public int computer(int n ,int m) {
		return n+m;
	}
}
class Sub implements IComputer
{
	int m,n;
	public int computer(int n ,int m) {
		return n-m;
	}
}

7-18 NCHU_雨刷程序功能扩展设计

在给定的汽车手动风挡玻璃雨刷程序的基础上,对程序进行重构(Refactoring),使得程序可以对功能进行扩展。

输入格式:

输入共2行,第一行为一个整型数字,取值范围为[1,2],其中1代表表1所描述的雨刷系统,2代表表2所描述的雨刷系统;第二行为若干个用一个或多个空格分开且以数字0结束的整型数字,取值范围为[1,4],其中1代表控制杆升档操作、2代表控制杆降档操作、3代表刻度盘升刻度操作、4代表刻度盘降刻度操作、0代表操作结束(输入时只要遇到0即认为输入结束)。

输出格式:

程序的输出行数根据每一次对控制杆/刻度盘操作次数而定,每一次对控制杆/刻度盘进行了操作,则输出一行数据。格式为:操作类型/控制杆当前档位/刻度盘当前刻度/雨刷当前速度
其中,操作类型共四种,分别为Lever upLever downDial upDial down;控制杆当前档位显示中文内容,例如停止间歇低速高速超高速(表2);刻度盘当前刻度显示为数值,例如12345(4、5见表2);雨刷当前速度显示为整型数值。

输入样例:

在这里给出一组输入。例如:

1
1 1 1 2 3 2 4 3 3 1 2 0

输出样例:

在这里给出相应的输出。例如:

Lever up/间歇/1/4
Lever up/低速/1/30
Lever up/高速/1/60
Lever down/低速/1/30
Dial up/低速/2/30
Lever down/间歇/2/6
Dial down/间歇/1/4
Dial up/间歇/2/6
Dial up/间歇/3/12
Lever up/低速/3/30
Lever down/间歇/3/12

实现代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        int choice = 0;
        int a = 0;
        int flag = 0;
        Scanner input = new Scanner(System.in);
        a = input.nextInt();
        if(a != 1 && a != 2){
            System.out.println("Wrong Format");
            System.exit(0);
        }
        choice = input.nextInt();
        Lever lever = new Lever(1);
        Dial dial = new Dial(1);
        Brush brush = new Brush(0);
        Agent agent = new Agent(lever,dial,brush);
        if(a == 1){
            dial.setN(3);//刻度1-3
            lever.setN(4);//停止,间歇,低速,高速四种
        }else{
            dial.setN(5);//刻度1-3
            lever.setN(5);//停止,间歇,低速,高速四种
        }
        while(choice != 0){
            switch(choice){
                case 1://Lever up
                    System.out.print("Lever up/");
                    agent.getLever().leverUp();
                    break;
                case 2://Lever down
                    System.out.print("Lever down/");
                    agent.getLever().leverDown();
                    break;
                case 3://Dial up
                    System.out.print("Dial up/");
                    agent.getDial().dialUp();
                    break;
                case 4://Dial down
                    System.out.print("Dial down/");
                    agent.getDial().dialDown();
                    break;
                case 0://Terminate
                    System.exit(0);
                default :
                    flag=1;
                    choice = input.nextInt();
                    break;
            }
            if(flag == 0) {
                agent.dealSpeed();//Get brush’s speed
                System.out.println(agent.getBrush().getSpeed());
                choice = input.nextInt();
            }

        }
    }
}
class Lever {
    private int pos;//档位
    private int n;
    public Lever(){
    }
    public Lever(int pos){
        this.pos = pos;
    }
    public int getPos() {
        return pos;
    }
    //升档
    public void leverUp() {
        if(this.pos < n){
            this.pos++;
        }
    }
    //降档
    public void leverDown(){
        if(this.pos > 1){
            this.pos--;
        }
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }
}
class Dial {
    private int pos;//刻度
    private int n;
    public Dial(){
    }
    public Dial(int pos){
        this.pos = pos;
    }
    public int getPos() {
        return pos;
    }
    //升刻度
    public void dialUp() {
        if(this.pos < n){
            this.pos ++;
        }
    }
    //降刻度
    public void dialDown(){
        if(this.pos > 1){
            this.pos --;
        }
    }
    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }
}
class Brush {
    private int speed;
    public Brush(){
    }
    public Brush(int speed){
        this.speed = speed;
    }
    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        this.speed = speed;
    }
}
//为了减小实体类耦合性,采用中介模式,设计Agent代理类
class Agent {
    //聚合型类设计
    private Lever lever;
    private Dial dial;
    private Brush brush;
    public Agent(){
    }
    public Agent(Lever lever,Dial dial,Brush brush){
        this.lever = lever;
        this.dial = dial;
        this.brush = brush;
    }
    public Lever getLever() {
        return lever;
    }
    public void setLever(Lever lever) {
        this.lever = lever;
    }
    public Dial getDial() {
        return dial;
    }
    public void setDial(Dial dial) {
        this.dial = dial;
    }
    public Brush getBrush() {
        return brush;
    }
    public void setBrush(Brush brush) {
        this.brush = brush;
    }
    //主要业务逻辑:根据控制杆档位、刻度盘刻度计算雨刷摆动速度
    public void dealSpeed() {
        int speed = 0;
        switch(this.lever.getPos()){
            case 1://停止
                System.out.print("停止"+"/"+this.dial.getPos()+"/");
                speed = 0;break;
            case 2://间歇
                System.out.print("间歇"+"/"+this.dial.getPos()+"/");
                switch(this.dial.getPos()){
                    case 1://刻度1
                        speed = 4;break;
                    case 2://刻度2
                        speed = 6;break;
                    case 3://刻度3
                        speed = 12;break;
                    case 4://
                        speed=15;break;
                    case 5:
                        speed=20;break;
                }
                break;
            case 3://低速
                System.out.print("低速"+"/"+this.dial.getPos()+"/");
                speed = 30;break;
            case 4://高速
                System.out.print("高速"+"/"+this.dial.getPos()+"/");
                speed = 60;break;
            case 5://高速
                System.out.print("超高速"+"/"+this.dial.getPos()+"/");
                speed = 90;break;
        }
        this.brush.setSpeed(speed);
    }
}

7-19 校园角色类设计-1

学校需要构建综合系统,使用者包含多种角色。角色Role分两类:学生Student和雇员Employee;雇员又分为教员Faculty和职员Staff。
每个角色都有姓名、性别。学生有学号、班级。一个雇员有工号、入职日期。教员有职称。职员有职位称号。
请以如下Main类为基础,构建各个角色类,将代码补充完整。

public class Main {
    public static void main(String[] args) {
        Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");
        Student stu=new Student("李四",19,"20201103","202011");
        Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");        
        fac.show();
        sta.show();
        stu.show();
    }
}

输入格式:

输出格式:

我是张三,年龄32岁。工号是33006,2019年10月25日入职。是一名教师,讲师职称。
我是王五,年龄27岁。工号是32011,2015年6月17日入职。是一名教务员。
我是李四,年龄19岁。学号是20201103,来自202011班。

输入样例:

在这里给出一组输入。例如:



输出样例:

在这里给出相应的输出。例如:

我是张三,年龄32岁。工号是33006,2019年10月25日入职。是一名教师,讲师职称。
我是王五,年龄27岁。工号是32011,2015年6月17日入职。是一名教务员。
我是李四,年龄19岁。学号是20201103,来自202011班。

实现代码:

import java.util.Arrays;
import java.util.Scanner;

class Role{
    String name;
    int age;

    Role(String name, int age){
        this.name = name;
        this.age = age;
    }
}

class Faculty extends Role{
    private String id;
    private String f_name;

    private String year;
    private String month;
    private String day;

    Faculty(String name, int age, String id, String year, String month, String day, String f_name){
        super(name, age);
        this.id = id;
        this.year = year;
        this.month = month;
        this.day = day;
        this.f_name = f_name;
    }

    public void show(){
        System.out.println("我是" + super.name + ",年龄" + super.age + "岁。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。是一名教师," + this.f_name + "职称。");
    }
}

class Student extends Role{
    private String id;
    private String cl;

    Student(String name, int age, String id, String cl){
        super(name, age);
        this.cl = cl;
        this.id = id;
    }

    public void show(){
        System.out.println("我是" + super.name + ",年龄" + age + "岁。学号是" + id + ",来自" + cl + "班。");
    }
}

class Staff extends Role{
    private String id;
    private String f_name;

    private String year;
    private String month;
    private String day;

    Staff(String name, int age, String id, String year, String month, String day, String f_name){
        super(name, age);
        this.id = id;
        this.year = year;
        this.month = month;
        this.day = day;
        this.f_name = f_name;
    }

    public void show(){
        System.out.println("我是" + super.name + ",年龄" + super.age + "岁。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。是一名" + this.f_name + "。");
    }
}

public class Main {
    public static void main(String[] args) {
        Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");
        Student stu=new Student("李四",19,"20201103","202011");
        Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");
        fac.show();
        sta.show();
        stu.show();
    }
}

7-20 校园角色类设计-2

在校园角色类设计-1题的基础上,增加了部分要求,加粗部分为增加的内容:
学校需要构建综合系统,使用者包含多种角色。角色Role分两类:学生Student和雇员Employee;雇员又分为教员Faculty和职员Staff。
每个角色都有姓名、年龄、性别、电话号码。学生有学号、班级、班级职务(班长、副班长、学习委员等)。一个雇员有工号、入职日期、所在部门。教员有职称和专业。职员有职位称号。
请以如下Main类为基础,构建各个角色类,将代码补充完整。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");
Student stu=new Student("李四",19,"20201103","202011");
Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");
fac.setSex('男');
fac.setTel("13600770077");
fac.setDepartment("数信学院");
fac.setMajor("数学");
stu.setSex('女');
stu.setTel("18000009999");
stu.setPosition("班长");
sta.setSex('男');
sta.setTel("18966666666");
sta.setDepartment("航制学院");
Scanner input = new Scanner(System.in);
int i = input.nextInt();
/*
本部分使用多态根据用户的输入,输出不同的角色人物的信息,
输入1:教员
输入2:学生
输入3:职员
其他输入:输出"Wrong Format"
*/
}
}

输入格式:

数值

输出格式:

人物的基本信息。根据角色的不同而有差别。

输入样例1:

在这里给出一组输入。例如:

1

输出样例1:

在这里给出相应的输出。例如:

我是张三,男,年龄32岁。电话是13600770077。工号是33006,2019年10月25日入职。就职于数信学院。是一名教师,数学专业,讲师职称。

输入样例2:

在这里给出一组输入。例如:

2

输出样例2:

在这里给出相应的输出。例如:

我是李四,女,年龄19岁。电话是18000009999。学号是20201103,来自202011班。担任班长职务。

输入样例3:

在这里给出一组输入。例如:

3

输出样例3:

在这里给出相应的输出。例如:

我是王五,男,年龄27岁。电话是18966666666。工号是32011,2015年6月17日入职。就职于航制学院。是一名教务员。

输入样例3:

在这里给出一组输入。例如:

5

输出样例3:

在这里给出相应的输出。例如:

Wrong Format

实现代码:

import java.util.Arrays;
import java.util.Scanner;

class Role{
    String name;
    int age;
    char sex;
    String tel;

    Role(String name, int age){
        this.name = name;
        this.age = age;
    }
}

class Faculty extends Role{
    private String id;
    private String f_name;

    private String year;
    private String month;
    private String day;


    private String department;
    private String major;

    Faculty(String name, int age, String id, String year, String month, String day, String f_name){
        super(name, age);
        this.id = id;
        this.year = year;
        this.month = month;
        this.day = day;
        this.f_name = f_name;
    }

    public void show(){
        System.out.println("我是" + super.name + "," + this.sex +  ",年龄" + super.age + "岁。电话是" + super.tel +  "。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。" + "就职于"+ this.department + "。是一名教师," +  this.major + "专业," + this.f_name + "职称。");
    }

    public void setTel(String tel) {
        super.tel = tel;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public void setSex(char sex) {
        super.sex = sex;
    }
}

class Student extends Role{
    private String id;
    private String cl;

    private String position;

    Student(String name, int age, String id, String cl){
        super(name, age);
        this.cl = cl;
        this.id = id;
    }

    public void show(){
        System.out.println("我是" + super.name + "," + this.sex +  ",年龄" + super.age + "岁。电话是" + super.tel + "。学号是" + id + ",来自" + cl + "班。" + "担任" + this.position + "职务。");
    }

    public void setPosition(String position) {
        this.position = position;
    }

    public void setSex(char sex){
        super.sex = sex;
    }

    public void setTel(String tel){
        super.tel = tel;
    }
}

class Staff extends Role{
    private String id;
    private String f_name;

    private String year;
    private String month;
    private String day;

    private String department;

    Staff(String name, int age, String id, String year, String month, String day, String f_name){
        super(name, age);
        this.id = id;
        this.year = year;
        this.month = month;
        this.day = day;
        this.f_name = f_name;
    }

    public void show(){
        System.out.println("我是" + super.name + "," + this.sex +  ",年龄" + super.age + "岁。电话是" + super.tel + "。工号是" + this.id + "," + this.year + "年" + Integer.parseInt(this.month) + "月" + Integer.parseInt(this.day) + "日入职。就职于" + this.department + "。是一名" + this.f_name + "。");
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public void setSex(char sex){
        super.sex = sex;
    }

    public void setTel(String tel){
        super.tel = tel;
    }
}

public class Main { public static void main(String[] args) { // TODO Auto-generated method stub
    Faculty fac = new Faculty("张三",32,"33006","2019","10","25","讲师");
    Student stu=new Student("李四",19,"20201103","202011");
    Staff sta = new Staff("王五",27,"32011","2015","06","17","教务员");

    fac.setSex('男');
    fac.setTel("13600770077");
    fac.setDepartment("数信学院");
    fac.setMajor("数学");

    stu.setSex('女');
    stu.setTel("18000009999");
    stu.setPosition("班长");

    sta.setSex('男');
    sta.setTel("18966666666");
    sta.setDepartment("航制学院");
    Scanner input = new Scanner(System.in);
    int i = input.nextInt(); /* 使用多态根据用户的输入,输出不同的角色人物的信息, 输入1:教员 输入2:学生 输入3:职员 其他输入:输出"Wrong Format" */

    if(i == 1){
        fac.show();
    }
    else if(i == 2){
        stu.show();
    }
    else if(i == 3){
        sta.show();
    }
    else{
        System.out.println("Wrong Format");
    }
} }
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐