Java4&Java5

6-1 设计一个矩形类Rectangle (10分)
设计一个名为Rectangle的类表示矩形。这个类包括: 两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1. 一个无参构造方法。 一个为width和height指定值的矩形构造方法。 一个名为getArea()的方法返回这个矩形的面积。 一个名为getPerimeter()的方法返回这个矩形的周长。
类名为:
Rectangle
裁判测试程序样例:

import java.util.Scanner;/* 你的代码将被嵌入到这里 */
public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    double w = input.nextDouble();
    double h = input.nextDouble();
    Rectangle myRectangle = new Rectangle(w, h);
    System.out.println(myRectangle.getArea());
    System.out.println(myRectangle.getPerimeter());

    input.close();
  }
}

输入样例:
3.14 2.78
输出样例:
8.7292
11.84

class Rectangle{

    private double width = 1;
    private double heigth = 1;
    public Rectangle() {
    }
    public Rectangle(double width, double heigth) {
        this.width = width;
        this.heigth = heigth;
    }
    public double getArea(){
        return this.width * this.heigth;
    }
    public double getPerimeter(){
        return ( this.heigth + this.width)*2;
    }
}

6-2 sdust-Java-模拟主板、USB口、TypeC口、PS2口设备 (10分)
使用Java编码设计实现模拟计算机硬件中的主板、USB口、TypeC口、PS2口及其组合方式。通常,计算机主板中提供了各种不同类型的对外接口,可以对接不同类型的设备。例如,可以接USB口的U盘、鼠标等,可以接TypeC口的鼠标、键盘,可以接PS2口的键盘。要求:1)通过下面Main类中main方法给出的代码及其注释,设计相关的类、抽象类或接口(具体需要的类、接口或抽象类,根据程序样例给出的代码和注释来编写),使得main方法中的代码能够正确运行,且能够实现样例所示的输入输出功能。2)代码设计中要考虑可扩展性,当需要对着新的设备时已有代码不能修改。例如,主板中接入USB口的键盘,此时需要加入新的类KeyBoardUSB,原有的代码不需要修改。
Main类的main方法测试程序样例:

import java.util.Scanner;public class Main{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String mainBoardModel = scan.next();//用户输入主板的型号
		String mousePS2Model = scan.next();//用户输入PS2口鼠标的型号
		String keyBoardPS2Model = scan.next();//用户输入PS2口键盘的型号
		String flashDiskModel = scan.next();//用户输入U盘的型号
		
		MainBoard mainboard = new MainBoard(mainBoardModel);//生成主板对象
		
		KeyBoardPS2 keyboard = new KeyBoardPS2(keyBoardPS2Model);//生成PS2口键盘对象
		mainboard.setPs2(keyboard);//将键盘接入主板的PS2口
		mainboard.inputFromPS2();//获取从键盘录入的数据(注意:是模拟从键盘录入数据,不需要编码利用Scanner接收数据)
		mainboard.setPs2(null);//拔出PS2口键盘
		
		MousePS2 mouse = new MousePS2(mousePS2Model);//生成PS2口的鼠标对象
		mainboard.setPs2(mouse);//将鼠标接入主板的PS2口
		mainboard.inputFromPS2();//获取从键盘录入的数据
		//
		FlashDisk flashdisk = new FlashDisk(flashDiskModel);//生成U盘对象
		mainboard.setUsb(flashdisk);//在主板上插入U盘的USB口
		mainboard.read();//从外接设备(USB或TypeC口设备上读取数据,只要接入相关设备,则从该设备读取数据)
		mainboard.setUsb(null);//拔下U盘:flashdisk
		
		mainboard.setTypeC(flashdisk);//将U盘:flashdisk插入主板的TypeC口(FlashDisk的对象同时支持USB和TypeC口)
		mainboard.read();//从外接设备(USB或TypeC口设备上读取数据,只要接入相关设备,则从该设备读取数据)
		
		MouseUSB mouseUSB = new MouseUSB();//生成USB鼠标
		mainboard.setUsb(mouseUSB);//在主板上插入USB鼠标的USB口
		
	    scan.close();
	}
}

/*
答案
*/
输入样例:
MicroStar
A4TECH
Logitech
Kingston
输出样例:
MicroStar MainBoard:Get data from Logitech PS2 keyboard
MicroStar MainBoard:Get data from A4TECH PS2 Mouse
MicroStar MainBoard:Read data through Kingston USB U盘
MicroStar MainBoard:Read data through Kingston TypeC U盘

interface  USB {
    abstract String getName();
    abstract void readFromUSB();
}
 
interface  PS2 {
    abstract String getName();
    abstract void inputFromPS2();
}
 
interface TypeC {
    abstract String getName();
    abstract void readFromTypeC();
}
 
class KeyBoardPS2 implements PS2 {
    private String name;
    public KeyBoardPS2(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void inputFromPS2() {
        System.out.println("Get data from " + this.getName() + " PS2 keyboard");
    }
}
 
class MousePS2 implements PS2 {
    private String name;
    public MousePS2(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void inputFromPS2() {
        System.out.println("Get data from " + this.getName() + " PS2 Mouse");
    }
}
 
class FlashDisk implements TypeC, USB {
    private String name;
    public FlashDisk(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void readFromUSB() {
        System.out.println("Read data through " + this.getName() + " USB U盘");
    }
    public void  readFromTypeC() {
        System.out.println("Read data through " + this.getName() + " TypeC U盘");
    }
}
 
class MainBoard {
    private String name;
    private USB usbslot;
    private PS2 ps2slot;
    private TypeC typecslot;
    public MainBoard(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void setPs2(PS2 rhs) {
        this.ps2slot = rhs;
    }
    public void setUsb(USB rhs) {
        this.usbslot = rhs;
    }
    public  void setTypeC(TypeC rhs) {
        this.typecslot = rhs;
    }
    public void inputFromPS2() {
        System.out.print(this.getName() + " MainBoard:");
        this.ps2slot.inputFromPS2();
    }
    public void read() {
        System.out.print(this.getName() + " MainBoard:");
        if(this.usbslot != null) {
            this.usbslot.readFromUSB();
        } else {
            this.typecslot.readFromTypeC();
        }
    }
}
 
class MouseUSB implements USB {
 
    public void readFromUSB() {
 
    }
 
    public String getName() {
        return "";
    }
}

6-3 Book类的设计 (10分)

阅读测试程序,设计一个Book类。
函数接口定义:
class Book{}
该类有 四个私有属性 分别是 书籍名称、 价格、 作者、 出版年份,以及相应的set 与get方法;该类有一个含有四个参数的构造方法,这四个参数依次是书籍名称、 价格、 作者、 出版年份 。
裁判测试程序样例:

import java.util.*;public class Main {
	public static void main(String[] args) {
		List <Book>books=new ArrayList<Book>();
		Scanner in=new Scanner(System.in);
		for(int i=0;i<5;i++)
		{	String str=in.nextLine();
			String []data=str.split(",");
			Book book=new Book(data[0],Integer.parseInt(data[1]),data[2],Integer.parseInt(data[3]));
			books.add(book);
		}
		
		System.out.println(totalprice(books));	
	}
	
	/*计算所有book的总价*/
	public static int totalprice(List <Book>books) 
	{  int result=0;
		for(int i=0;i<books.size();i++){result+=books.get(i).getPrice();}
		return result;
	}
}

/* 请在这里填写答案 */
输入样例:
三体,100,无名氏,1998
上下五千年,50,编辑部,2015
海底世界,50,无名氏2,2000
三体1,100,无名氏3,2017
三体3,100,无名氏4,1998

输出样例:
400

class Book{
	private String name;
	private double price;
	private String author;
	private int year;
	
	public Book(String name, double price, String author, int year) {
		super();
		this.name = name;
		this.price = price;
		this.author = author;
		this.year = year;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getYear() {
		return year;
	}
	public void setYear(int year) {
		this.year = year;
	}
	
}

6-4 数组工具类的设计 (10分)

本题要求设计一个名为MyArrays的类,根据调用的方式实现相应的方法。
函数接口定义:
请同学根据该类的调用方式和结果,自行设计MyArrays类中的方法,满足应用的需要。
裁判测试程序样例:

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		int array[]= new int[n];
		
		for(int i=0;i<n;i++)
		{
			array[i]=sc.nextInt();
		}
		
		MyArrays.printArray(array);//显示数组的内容
		MyArrays.sortArray(array);	//对数组元素排序
		MyArrays.printArray(array);//显示排序后的结果
		int sum=MyArrays.sumOfArray(array);//数组元素求和
		System.out.println(sum);//显示数组元素的和

	}

}

/* 请在这里填写MyArrays类的有关代码 */
输入样例:
5
5 4 6 8 3
输出样例:
5,4,6,8,3
3,4,5,6,8
26

class MyArrays{

	public static void printArray(int[] array) {
		for(int i=0;i<array.length-1;i++) {
			System.out.print(array[i]+",");
		}
		System.out.println(array[array.length-1]);
	}

	public static void sortArray(int[] array) {
		Arrays.parallelSort(array);
		
	}

	public static int sumOfArray(int[] array) {
		int sum=0;
		for(int i=0;i<array.length;i++) {
			sum+=array[i];
		}
		return sum;
	}
	
}

7-1 字符串替换 (10分)

将文本文件中指定的字符串替换成新字符串。 由于目前的OJ系统暂时不能支持用户读入文件,我们编写程序从键盘输入文件中的内容,当输入的一行为end时,表示结束。end后面有两个字符串,要求用第二个字符串替换文本中所有的第一个字符串。
输入格式:
Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology. The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
end (表示结束)
Institute (第一个字符串,要求用第二个字符串替换)
University (第二个字符串)
输出格式:
Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
输入样例:
Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.
The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
end
Institute
University
输出样例:
Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String str1;
		String str2="";
		String str3="";
		while(true) {
			str1=sc.nextLine();
			if (str1.contentEquals("end")) {
				break;
			}else {
				str2=str2.concat(str1)+'\n'; //sc.nextLine();遇见换行符结束,所以要补一个\n
			}
		}
		str1=sc.next();
		str3=sc.next();
        str2.replaceAll("\n","");   //文本有换行的时候,去掉换行,中间也没有空格
		String str4=str2.replaceAll(str1, str3);
		System.out.print(str4);
	}
}

7-2 学生类-构造函数 (10分)

定义一个有关学生的Student类,内含类成员变量: String name、String sex、int age,所有的变量必须为私有(private)。
1.编写有参构造函数:
能对name,sex,age赋值。
2.覆盖toString函数:
按照格式:类名 [name=, sex=, age=]输出。使用idea自动生成,然后在修改成该输出格式
3.对每个属性生成setter/getter方法
4.main方法中
•输入1行name age sex , 调用上面的有参构造函数新建对象。
输入样例:
tom 15 male
输出样例:
Student [name=‘tom’, sex=‘male’, age=15]

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String name=sc.next();
		int age=sc.nextInt();
		String sex=sc.next();
		student s=new student(name,age,sex);
		System.out.println(s.toString());
    }
}
class student{
	String name;
	String sex;
	int age;
	public student(String name, int age, String sex) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" +"'"+ name +"'"+ ", sex=" +"'"+ sex +"'"+ ", age=" + age + "]";
	}
}

7-1 jmu-Java-03面向对象基础-05-覆盖 (3分)

Java每个对象都继承自Object,都有equals、toString等方法。
现在需要定义PersonOverride类并覆盖其toString与equals方法。

  1. 新建PersonOverride类
    a. 属性:String name、int age、boolean gender,所有的变量必须为私有(private)。
    b. 有参构造函数,参数为name, age, gender
    c. 无参构造函数,使用this(name, age,gender)调用有参构造函数。参数值分别为"default",1,true
    d.toString()方法返回格式为:name-age-gender
    e. equals方法需比较name、age、gender,这三者内容都相同,才返回true.
  2. main方法
    2.1 输入n1,使用无参构造函数创建n1个对象,放入数组persons1。
    2.2 输入n2,然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。
    2.3 输出persons1数组中的所有对象
    2.4 输出persons2数组中的所有对象
    2.5 输出persons2中实际包含的对象的数量
    2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造函数。
    提示:使用ArrayList代替数组大幅复简化代码,请尝试重构你的代码。
    输入样例:
    1
    3
    zhang 10 true
    zhang 10 true
    zhang 10 false
    输出样例:
    default-1-true
    zhang-10-true
    zhang-10-false
    2
    [public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();
		int b=sc.nextInt();
		PersonOverride[] a1=new PersonOverride[a];
		PersonOverride[] b2=new PersonOverride[b];
		for(int i=0;i<a;i++) {
			a1[i]=new PersonOverride();
			
		}
		int count=0;
		for(int i=0;i<b;i++) {
			String name=sc.next();
			int age=sc.nextInt();
			boolean gender=sc.nextBoolean();
			PersonOverride tempo= new PersonOverride(name, age,gender);
			if(count==0) {
				b2[0]=tempo;
				count++;
			}else {
				boolean flag=true;   //记得要建立flag
				for(int j=0;j<count;j++) {
					if(tempo.equals(b2[j])) {
						flag=false;
					}
				}
				if(flag) {
					b2[count]=tempo;
					count++;
				}
				
			}
			
			
		}
		for(int i=0;i<a;i++) {
			System.out.println(a1[i].toString());
		}
		for(int i=0;i<count;i++) {
			System.out.println(b2[i].toString());
		}
		System.out.println(count);
		System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
		
	}
}
class PersonOverride{
	private String name;
	private int age;
	private boolean gender;
	public PersonOverride() {
		this.name ="default";
		this.age = 1;
		this.gender =true;
	}
	public PersonOverride(String name, int age, boolean gender) {
		super();
		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 this.name+'-'+String.valueOf(this.age)+'-'+String.valueOf(this.gender);
		
	}
	
@Override
	public boolean equals(Object obj) {
	 if (this == obj) return true;  
	 if(obj==null||getClass()!=obj.getClass()) return false;
	 PersonOverride person=(PersonOverride) obj; 
	 return this.getAge()==person.age&&this.getName(). equals(person.name)&&this.isGender()==person.gender;
	 
	}
	
}

7-2 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (15分)

定义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(); //直接返回namepublic 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情况。
    提示
  3. 排序可使用Collections.sort
  4. equals方法要考虑周全
    main方法说明

创建若干Student对象、Employee对象。
输入s,然后依次输入name age gender stuNo clazz创建Student对象。
输入e,然后依次输入name age gender salary company创建Employee对象。
然后将创建好的对象放入List personList。输入其他字符,则结束创建。
创建说明:对于String类型,如果为null则不创建对象,而赋值为null。对于company属性,如果为null则赋值为null,否则创建相应的Company对象。
2.
3.
对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable或Comparator
4.
5.
接受输入,如果输入为exit则return退出程序,否则继续下面步骤。
6.
7.
将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。
8.
9.
输出字符串stuList,然后输出stuList中的每个对象。
10.
11.
输出字符串empList,然后输出empList中的每个对象。
12.
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.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws InterruptedException {
       Scanner sc=new Scanner(System.in);
       List<Person> personList=new ArrayList<Person>();
       String name;
       int age;
       boolean gender;
       String stuNo;
       String clazz;
       String companyName;
       Company company;
       double salary;
       //输入
       while(true) {
    	   String t=sc.next();
    	   if(t.equals("s")) {
    		   name=sc.next();
    		   age=sc.nextInt();
    		   gender=sc.nextBoolean();
    		   stuNo=sc.next();
    		   clazz=sc.next();
    		   if(name==null||stuNo==null||clazz==null) {
    			   continue;
    		   }
    		   personList.add(new Student(name, age, gender, stuNo, clazz));
    		   
	       }else if(t.equals("e")){
	    	   name=sc.next();
    		   age=sc.nextInt();
    		   gender=sc.nextBoolean();
    		   salary=sc.nextDouble();
    		   companyName=sc.next();
    		   company=new Company(companyName);
    		   if(name==null) {
    			   continue;
    		   }
    		   /*if(companyName==null) {
    			   companyName="null";
    		   }*/
	    	   personList.add(new Employee(name, age, gender, company, salary));
	       }else{
	    	   break;
	       }
	      
       }
        //排序
       Collections.sort(personList, new Name_AgeComparator());
      
       for(int i=0;i<personList.size();i++) {
    	   
    		   System.out.println(personList.get(i).toString()); 
    	  
       }
       
       
       String str=sc.next();
       while(true) {
    	   if(str.equals("return")||str.equals("exit")) {
    		   break;
    	   }else {
        	   //分组
               List<Person> stuList=new ArrayList<Person>();
               List<Person> empList=new ArrayList<Person>();
               //判断过程要根据equals equals是自己定义的 所以没比较工资 所以还是循环比较吧
               boolean flag1=true;
               boolean flag2=true;
               for(int i=0;i<personList.size();i++) {
            	   if(personList.get(i).toString().indexOf("Student")>=0) {
            		   if(stuList.size()==0) {
            			   stuList.add(personList.get(i));
            		   }
            		   for(int j=0;j<stuList.size();j++) {
            			   if(personList.get(i).equals(stuList.get(j))){
            				   flag1=false;
            			   }
            		   }
            		   if(flag1) {
            			   stuList.add(personList.get(i));
            			   
            		   }
            		   flag1=true;
            	   }else {
            		   if(empList.size()==0) {
            			   empList.add(personList.get(i));
            		   }
            		   for(int j=0;j<empList.size();j++) {
            			   if(personList.get(i).equals(empList.get(j))){
            				   flag2=false;
            			   }
            		   }
            		   if(flag2) {
            			   empList.add(personList.get(i));
            		   }
            		   flag2=true;
            	   }
               }
               System.out.println("stuList");
               for(int i=0;i<stuList.size();i++) {
            	   
        		   System.out.println(stuList.get(i).toString()); 
        	  
               }
               System.out.println("empList");
               for(int i=0;i<empList.size();i++) {
            	   
        		   System.out.println(empList.get(i).toString()); 
        	  
               }
               break;
           } 
    	   }
       
    }
    static class Name_AgeComparator implements Comparator<Person>{

		@Override
		public int compare(Person o1, Person o2) {
			 if(o1.name.compareTo(o2.name)==0) {
				if(o1.age==o2.age) {
					return 0;
				}else if(o1.age<o2.age) {
					return -1;
				}else {
					return 1;
				}
			}else {
				return(o1.name.compareTo(o2.name));
			}
		}
    	
    }
    
    
}
abstract class Person{
	String name;
	int age;
	boolean gender;
	public Person(String name, int age, boolean gender) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	@Override
	public String toString() {
		
		return this.name+'-'+String.valueOf(this.age)+'-'+String.valueOf(this.gender);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (gender != other.gender)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}
class Student extends Person{
	String stuNo;
	String clazz;
	public Student(String name, int age, boolean gender, String stuNo, String clazz) {
		super(name,age,gender);
		this.clazz=clazz;
		this.stuNo=stuNo;
	}
	@Override
	public String toString() {
		return"Student:"+ super.toString()+'-'+this.stuNo+'-'+this.clazz;
	}
	@Override
	public boolean equals(Object obj) {
		if (!super.equals(obj))
			return false;
		if (this == obj)
			return true;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (clazz == null) {
			if (other.clazz != null)
				return false;
		} else if (!clazz.equals(other.clazz))
			return false;
		if (stuNo == null) {
			if (other.stuNo != null)
				return false;
		} else if (!stuNo.equals(other.stuNo))
			return false;
		return true;
	}
	
	
}
class Company{
	String name;
	public Company(){
		
	}
	public Company(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return name;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Company other = (Company) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
	
}
class Employee extends Person{
	Company company;
	double salary;
	public Employee(String name, int age, boolean gender, Company company, double salary) {
		super(name, age, gender);
		this.company = company;
		this.salary = salary;
	}
	@Override
	public String toString() {
		return "Employee:"+ super.toString()+'-'+company+'-'+salary;
	}
	@Override
	public boolean equals(Object obj) {
		if (!super.equals(obj))
			return false;
		if (this == obj)
			return true;
		if (getClass() != obj.getClass())
			return false;
		Employee other = (Employee) obj;
		if (company == null) {
			if (other.company != null)
				return false;
		} 
		else if (!company.equals(other.company))
			return false;
		DecimalFormat df = new DecimalFormat("#.#");
		if (!df.format(salary) .equals( df.format(other.salary)))
			return false;
		return true;
	}
	
	
	
	
}

7-3 集体评分 (5分)

程序填空题。请补充以下代码,完成题目要求。(注意:需要提交完整代码) 有一个团队由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.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.Collectors;
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{
	int[] grade;	
	public RT(int[] grade){
		super(grade);
	    this.grade = grade;
	 }

	@Override
	public double mark() {
        //将int类转换为包装类
		int length=this.grade.length;
		Integer[] dest = new Integer[length];
        for (int i = 0; i < length; i++) {
            dest[i] = grade[i];
        }
        //包装类的最大值和最小值
        int min = (int) Collections.min(Arrays.asList(dest));
        int max = (int) Collections.max(Arrays.asList(dest));
        int sum=0;
        for(int i=0;i<length;i++) {
        	sum+=grade[i];
        }
		return (sum-min-max)/3.0 ;
	}

}

7-5 jmu-Java-03面向对象基础-04-形状-继承 (15分)

前言
前面题目形状中我们看到,为了输出所有形状的周长与面积,需要建立多个数组进行多次循环。这次试验使用继承与多态来改进我们的设计。
本题描述:

  1. 定义抽象类Shape
    属性:不可变静态常量double PI,值为3.14,
    抽象方法:public double getPerimeter(),public double getArea()
  2. Rectangle与Circle类均继承自Shape类。
    Rectangle类(属性:int width,length)、Circle类(属性:int radius)。
    带参构造函数为Rectangle(int width,int length),Circle(int radius)。
    toString方法(Eclipse自动生成)
  3. 编写double sumAllArea方法计算并返回传入的形状数组中所有对象的面积和与
    double sumAllPerimeter方法计算并返回传入的形状数组中所有对象的周长和。
  4. main方法
    4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则依次输入宽、长。如果输入cir,则输入半径。
    4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。 提示:使用Arrays.toString。
    4.3 最后输出每个形状的类型与父类型.使用类似shape.getClass() //获得类型, shape.getClass().getSuperclass() //获得父类型;
    注意:处理输入的时候使用混合使用nextInt与nextLine需注意行尾回车换行问题。
    思考
  5. 你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适?
  6. 是否应该声明为static?
    输入样例:
    4
    rect
    3 1
    rect
    1 5
    cir
    1
    cir
    2
    输出样例:
    38.84
    23.700000000000003
    [Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
    class Rectangle,class Shape
    class Rectangle,class Shape
    class Circle,class Shape
    class Circle,class Shape
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws InterruptedException {
       Scanner sc=new Scanner(System.in);
       List<Shape> shapeSum=new ArrayList<Shape>();
       double allArea=0;
       double allPer=0;
       int n=sc.nextInt();
       for(int i=0;i<n;i++) {
    	   String shape=sc.next();
    	   if(shape.equals("rect")) {
    		   shapeSum.add(new Rectangle(sc.nextInt(), sc.nextInt()));
    		   shapeSum.get(i).sumAllPerimeter(shapeSum.get(i).getPerimeter());
    		   shapeSum.get(i).sumAllArea(shapeSum.get(i).getArea());
    		   
    	   }else if(shape.equals("cir")){
    		   shapeSum.add(new Circle(sc.nextInt()));
    		   shapeSum.get(i).sumAllPerimeter(shapeSum.get(i).getPerimeter());
    		   shapeSum.get(i).sumAllArea(shapeSum.get(i).getArea());
    	   }
       }
       System.out.println(shapeSum.get(0).sumAllPerimeter(0));
       System.out.println(shapeSum.get(0).sumAllArea(0));
       //要用shapeSum.toString()才行
       System.out.println(shapeSum.toString());
       for(int i=0;i<n;i++) {
    	   System.out.println(shapeSum.get(i).getClass()+","+shapeSum.get(i).getClass().getSuperclass());
       }
    }
}
abstract class Shape{
	final double PI=3.14;
	public static double perimeter;
	public static double area;
	abstract public double getPerimeter();
	abstract public double getArea();
	double sumAllArea(double perimeter) {
		return this.perimeter+=perimeter;
			}
	double sumAllPerimeter(double area) {
		return this.area+=area;
	}
}
class Rectangle extends Shape{
	int width;
	int length;
	public Rectangle(int width, int length) {
		super();
		this.width = width;
		this.length = length;
	}

	@Override
	public double getPerimeter() {
		return 2*(width+length);
	}

	@Override
	public double getArea() {
		return width*length;
	}

	@Override
	public String toString() {
		return "Rectangle [width=" + width + ", length=" + length + "]";
	}
}
class Circle extends Shape{
	int radius;
	public Circle(int radius) {
		super();
		this.radius = radius;
	}

	@Override
	public double getPerimeter() {
		return PI*2*radius ;
	}

	@Override
	public double getArea() {
		return PI*radius*radius;
	}

	@Override
	public String toString() {
		return "Circle [radius=" + radius + "]";
	}
	
}


7-6 横平竖直 (5分)

程序填空题。根据题目要求完善下面的代码。请提交完整代码。 一个木块如果高度比宽度大,我们说它是竖着放的,否则我们说它是平放的。 读入一个木块的高度和宽度。如果它是平放的,则输出A,否则输出B。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int height, width;
        char status;
        height = in.nextInt();
        width = in.nextInt();
        Board board = new Board(height, width);
        status = board.getStatus();
        System.out.print(status);
    }
}
class Board{
   int height, width;
   public Board(int height, int width){
       this.height = height;
       this.width = width;
   }
   public char getStatus(){
       if(height<=width){
          return status(1);
       }else{
         return status(1.0);
       }
   }
   public char status(double rate){

   }
   public char status(int rate){

   }
}

输入格式:
输入在一行中给出2个绝对值不超过1000的正整数A和B。
输出格式:
在一行中输出一个字符A或者B。
输入样例:
50 50
输出样例:
A

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int height, width;
        char status;
        height = in.nextInt();
        width = in.nextInt();
        Board board = new Board(height, width);
        status = board.getStatus();
        System.out.print(status);
    }
}
class Board{
   int height, width;
   public Board(int height, int width){
       this.height = height;
       this.width = width;
   }
   public char getStatus(){
       if(height<=width){
          return status(1);
       }else{
         return status(1.0);
       }
   }
   public char status(double rate){
	   if(rate==1.0) {
		   return 'B';
	   }
	   return 'A';
   }
   public char status(int rate){
	   if(rate==1) {
		   return 'A';
	   }
	   return 'B';
   }
}

7-8 程序改错题2 (5分)

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

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) {
		Dog dog = new Dog();
		dog.shout();
		dog.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");
	}
}*/
public class Main {
	public static void main(String[] args) {
		Animal animal = new Dog();
		animal.shout();
		Dog s=(Dog)animal;
		s.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");
	}
}

版权声明:本文为H0llyLiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。