6-42 可定制排序的矩形 (20 分)
从键盘录入表示矩形个数的数字n,然后录入n个矩形的长和宽,然后对这n个矩形按照面积从大到小排序,并输出排序后的每个矩形的面积。要求:请设计Rectangle类,包含相应的构造函数和成员函数,实现Comparable接口
输入描述:
矩形个数,每个矩形的长和宽
输出描述:
由大到小排序的每个矩形的面积
裁判测试程序样例:
import java.util.Comparator;
import java.util.Arrays;
import java.util.Scanner;
/*你的代码被嵌在这里*/
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//输入矩形个数
int num_rectangle = scan.nextInt();
Rectangle[] recs = new Rectangle[num_rectangle];
//输入每个矩形的长和宽
for(int i=0;i<num_rectangle;i++){
int length = scan.nextInt();
int width = scan.nextInt();
Rectangle rec = new Rectangle(length,width);
recs[i] = rec;
}
//按照面积由大到小排序
Arrays.sort(recs);
//打印前n-1个矩形的面积
for(int i=0;i<recs.length-1;i++){
System.out.print(recs[i].getArea()+",");
}
//打印最后一个矩形的面积
System.out.print(recs[recs.length-1].getArea());
scan.close();
}
}
输入样例:
在这里给出一组输入。例如:
3 1 2 3 4 2 3
输出样例:
在这里给出相应的输出。例如:
12,6,2
Accepted Code
class Rectangle implements Comparable<Rectangle> {
int length;
int width;
Rectangle(int l, int w) {
length = l;
width = w;
}
int getArea() {
return length * width;
}
@Override
public int compareTo(Rectangle o) {
if (o.getArea() < this.getArea()) {
return -1;
} else if (o.getArea() == this.getArea()) {
return 0;
} else {
return 1;
}
}
}
6-50 图书类 (20 分)
构建一个书类Book,包括名称(字符串),价格(整型),作者(字符串,多个作者当做一个字符串处理),版本号(整型),提供带参数的构造函数Book(String name, int price, String author, int edition),提供该类的toString()和equals()方法,toString方法返回所有成员属性的值的字符串形式,形如“name: xxx, price: xxx, author: xxx, edition: xxx”,当两个Book对象的名称(不关心大小写,无空格)、作者(不关心大小写,无空格)、版本号相同时,认为两者表示同一本书。 Main函数中,读入两本书,输出他们是否相等,打印两本书的信息。
输入描述:
两本书信息
输出描述:
两本书的打印信息 两本书是否相等
裁判测试程序样例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Book b1 = new Book(s.next(),
s.nextInt(),
s.next(),
s.nextInt());
Book b2 = new Book(s.next(),s.nextInt(),s.next(),s.nextInt());
System.out.println(b1);
System.out.println(b2);
System.out.println(b1.equals(b2));
}
}
/* 你的代码被嵌在这里 */
输入样例:
在这里给出一组输入。例如:
ThinkingInJava
86
BruceEckel
4
CoreJava
95
CayS.Horstmann
10
输出样例:
在这里给出相应的输出。例如:
name: ThinkingInJava, price: 86, author: BruceEckel, edition: 4
name: CoreJava, price: 95, author: CayS.Horstmann, edition: 10
false
Accepted Code
class Book {
String name;
int price;
String author;
int edition;
Book(String name, int price, String author, int edition) {
this.author = author;
this.edition = edition;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "name: " + name + ", price: " + price + ", author: " + author + ", edition: " + edition;
}
@Override
public boolean equals(Object o) {
if (o == null || this == null) return false;
if (o instanceof Book) {
Book b = (Book)o;
if (name.toLowerCase().equals(b.name.toLowerCase()) && author.toLowerCase().equals(b.author.toLowerCase())
&& edition == b.edition) {
return true;
}
}
return false;
}
}
7-43 jmu-Java-04面向对象进阶–02-接口-Comparator (20 分)
Arrays.sort可以对所有实现Comparable的对象进行排序。但如果有多种排序需求,如有时候需对name进行降序排序,有时候只需要对年龄进行排序。使用Comparable无法满足这样的需求。可以编写不同的Comparator来满足多样的排序需求。
#1.编写PersonSortable2类 属性:private name(String)、private age(int)
有参构造函数:参数为name,age
toString方法:返回格式name-age
#2 编写Comparator类
编写NameComparator类,实现对name进行升序排序
编写AgeComparator类,对age进行升序排序
#3.main方法中
输入n
输入n行name age,并创建n个对象放入数组
对数组按照name进行升序排序后输出。
在3的基础上对数组按照age进行升序排序后输出。
最后最后两行使用如下代码输出NameComparator与AgeComparator所实现的所有接口。
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
输入样例:
5
zhang 15
zhang 12
wang 14
Wang 17
li 17
输出样例:
NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17
//最后两行是标识信息
Accepted Code
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
PersonSortable2 [] P = new PersonSortable2[n];
for(int i = 0; i< n; i ++){
P[i] = new PersonSortable2(scan.next(), scan.nextInt());
}
Arrays.sort(P, (new NameComparator()));
System.out.println("NameComparator:sort");
for(int i = 0; i < n; i ++){
System.out.println(P[i]);
}
Arrays.sort(P, (new AgeComparator()));
System.out.println("AgeComparator:sort");
for(int i = 0; i < n; i ++){
System.out.println(P[i]);
}
System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
scan.close();
}
}
class PersonSortable2 {
private String name;
private int age;
public PersonSortable2(String n, int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return new String(name.concat("-") + age);
}
}
class NameComparator implements Comparator<PersonSortable2> {
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
return o1.getName().compareTo(o2.getName());
}
}
class AgeComparator implements Comparator<PersonSortable2>{
@Override
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
return o1.getAge() - o2.getAge();
}
}