Java程序设计实验5---sdust

Java程序设计笔记 专栏收录该内容
8 篇文章 2 订阅

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();
	}
	
}
  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页

打赏作者

LiuLin_Hao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值