首页 > 其他分享 >PTA 7-6 手机按价格排序、查找

PTA 7-6 手机按价格排序、查找

时间:2024-06-17 12:32:22浏览次数:25  
标签:价格 price list PTA 链表 查找 型号 排序 type

编写手机类(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

相关文章