编写手机类(MobilePhone),含有type(型号,String类型)、price(价格,int类型)属性,要求该类实现Comparable接口,重写compareTo方法,实现按照price的大小来确定两个手机对象的大小关系。
在链表中添加三个手机对象(从键盘输入),通过Collections类的sort方法对链表中的对象按照price升序排序。输入第四个手机对象的信息,并查找它的price是否与链表中某个对象的price相同。
输入格式:
先输入三部手机的型号、价格信息
再输入要查找的第四部手机的型号、价格信息
每部手机信息的格式如:Redmi9A 599
输出格式:
先输出三部手机排序前的信息
再输出三部手机排序后的信息
最后输出第四部手机是否与前面某部手机价格相同
具体格式参考输出样例
输入样例1:
在这里给出一组输入,第四部手机与前三部中某一部价格相同。例如:
HONOR70 2699
MI12 3499
VIVOS15 3299
RedmiK50 2699
输出样例1:
在这里给出相应的输出,第四部手机与前三部中某一部价格相同。例如:
排序前,链表中的数据:
型号:HONOR70,价格:2699
型号:MI12,价格:3499
型号:VIVOS15,价格:3299
排序后,链表中的数据:
型号:HONOR70,价格:2699
型号:VIVOS15,价格:3299
型号:MI12,价格:3499
RedmiK50与链表中的HONOR70价格相同
输入样例2:
在这里给出一组输入,第四部手机与前面三部的价格都不同。例如:
RedmiNote9 1349
HonorX30 1699
VIVOT2X 1599
OPPOk10 2199
输出样例2:
在这里给出相应的输出,第四部手机与前面三部的价格都不同。例如:
排序前,链表中的数据:
型号:RedmiNote9,价格:1349
型号:HonorX30,价格:1699
型号:VIVOT2X,价格:1599
排序后,链表中的数据:
型号:RedmiNote9,价格:1349
型号:VIVOT2X,价格:1599
型号:HonorX30,价格:1699
链表中的对象,没有一个与OPPOk10价格相同的
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
LinkedList<MobilePhone> list=new LinkedList<MobilePhone>();
//这里因为题目提示我们需要用到链表,而LinkedList是相对来讲最好用的方法,因此我们在此处定义了一个LinkedList类型的链表list方便我们后续使用,<>括号里可以理解为相当于ArrayList<String>这样的一个类型;注意以后定义的时候填入即可;
for(int i=1;i<=3;i++) {
list.add(new MobilePhone(scan.next(),scan.nextInt()));
//这里是为我们的链表填入数值,方便后续运行;
}
System.out.println("排序前,链表中的数据:");
Iterator<MobilePhone> c=list.iterator();
//这里我们使用了迭代器,可以间接的理解为我们把list中的数据都赋值给了c
while(c.hasNext()) {
//这里的while循环是Iterator遍历链表内所有元素的一种方法,hasNext()会判断下一个是否还会有元素,此方法是最简单遍历链表内元素的一种方式;
MobilePhone s=c.next();
//这里假如我们直接打印的话,只能按照System.out.println(c.next());这样的方式打印,因此为了可以格式化输出,又重新定义了一个s,让c.next();赋值给它,让后利用s格式化打印;
System.out.println("型号:"+s.type+",价格:"+s.price);
}
Collections.sort(list);
//这里我们调用了Collections.sort();方法进行排序,值得注意的是,我们所构建的链表必须全部都属于统一类型,并且在调用接口时必须定义好compareTo方法,否者程序会报错,可以将其理解为我们在使用自己所定义的类实现compareable接口时,必须定义好compareTo方法;
System.out.println("排序后,链表中的数据:");
Iterator<MobilePhone> x=list.iterator();
while(x.hasNext()) {
MobilePhone s=x.next();
System.out.println("型号:"+s.type+",价格:"+s.price);
}
MobilePhone newphone=new MobilePhone(scan.next(),scan.nextInt());
//这里我们是定义了一个新的对象,为了后续的比较;
int t=Collections.binarySearch(list, newphone, null);
//这里我们利用了Collections.binarySearch比较方法,其实括号了三个对象分别表示,所要被查找的链表,要找的元素,第三是自己定义的一种方法,如果list里面的元素都是一个类型,那么就是null便可以;
if(t>=0)// 这里t>=0就代表已经找到需要找到元素的下标了{
System.out.println(newphone.type+"与链表中的"+list.get(t).type+"价格相同");
}else
{
System.out.println("链表中的对象,没有一个与"+newphone.type+"价格相同的");
}
}
}
class MobilePhone implements Comparable<MobilePhone>{
String type;
int price;
public MobilePhone(String type,int price) {
this.price=price;
this.type=type;
}
public int compareTo(MobilePhone x) {
return this.price-x.price;//这里是我们自行定义的一种比较方式;
}
}
标签:价格,price,list,PTA,链表,查找,型号,排序,type
From: https://blog.csdn.net/2303_81795561/article/details/139722593