第一道案例:手机按价格排序、查找
题目描述:
编写手机类(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价格相同的
package Day14.Test01;
import java.util.*;
// 定义MobilePhone类
public class MobilePhone {
private String type;
private int price;
public MobilePhone() {
}
public MobilePhone(String type, int price) {
this.type = type;
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "型号: " + type + ", 价格: " + price;
}
}
// 定义一个比较器,根据价格比较
class MyComparable implements Comparator<MobilePhone>{
@Override
public int compare(MobilePhone o1, MobilePhone o2) {
return o1.getPrice() - o2.getPrice();
}
}
class Main{
public static void main(String[] args) {
List<MobilePhone> list = new ArrayList<>();
System.out.println("请输入手机数量");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 0; i < num; i++) {
// 构建手机对象
MobilePhone mobilePhone = new MobilePhone(sc.next(), sc.nextInt());
// 将手机保存带list列表中
list.add(mobilePhone);
}
System.out.println("排序前,链表中的数据:");
for (MobilePhone m:list
) {
System.out.println(m);
}
MyComparable myComparable = new MyComparable();
//通过比较器进行排序
list.sort(myComparable);
System.out.println("排序后,链表中的数据:");
for (MobilePhone m:list
) {
System.out.println(m);
}
MobilePhone mobilePhone1 = new MobilePhone(sc.next(), sc.nextInt());
boolean flag = true;
// 判断列表中是否有新输入的手机
for (MobilePhone m:list
) {
if (mobilePhone1.getPrice() == m.getPrice()){
flag = false;
System.out.println(mobilePhone1.getType() + "与链表中的" + m.getType() + "0价格相同");
}
}
if (flag){
System.out.println("链表中的对象,没有一个与" + mobilePhone1.getType() + "价格相同的");
}
}
}
第二道案例:选择心动女生
题目描述:
临近11.11,CK看见周围的朋友一个个的都脱单或者正准备脱单了,CK也想要找一个女朋友了(听说国家会分配?)。MeiK听说了这件事情,表示CK终于开悟了,所以他整理了一份候选人名单给CK。可是CK心里有自己心动女生的身高区间和年龄限制,所以他想把符合条件的女生的信息给筛选出来,但是这可是难住了CK,事关C~K的幸福,你能帮帮他吗?
提示:MeiK提供的名单里可能会有重复的女生的信息。
输入格式:
多组输入。
第一行输入MeiK的候选人名单里有N个人(N<100000)。
第二行输入四个整数a,b,c,d。分别表示C~K心动女生的身高的最小值和最大值,年龄的最小值和最大值。(题目保证a<=b,c<=d)
接下来输入N行,每行表示一个女生的信息(姓名,身高,年龄,联系方式)
ps:联系方式不超过11个字符。
输出格式:
对于每一组输入,第一行输出一个n,表示符合条件的女生的数量。
接下来的n行,每一行输出一个符合条件的女生的信息。
输出顺序按身高从低到高排序,若身高相同,则按年龄从高到底排序,若年龄也相同,则按照输入顺序输出。
输入样例:
4
160 170 20 22
女神1 161 19 11111
女神2 167 20 22222
女神2 167 20 22222
女神3 163 21 33333
3
160 170 20 30
CHRR 161 29 22222
MICK 161 29 11111
KATE 161 39 22222
输出样例:
2
女神3 163 21 33333
女神2 167 20 22222
2
CHRR 161 29 22222
MICK 161 29 11111
这道题应该使用Map,或者是Set来写的,但是我不想改了😄😄
import java.util.*;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 可选女友数量
int num = sc.nextInt();
// 最小身高
int a = sc.nextInt();
// 最大身高
int b = sc.nextInt();
// 最小年龄
int c = sc.nextInt();
// 最大年龄
int d = sc.nextInt();
// 定义一个存储女神对象的列表
List<Nymph> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Nymph nymph = new Nymph(sc.next(),sc.nextInt(), sc.nextInt(), sc.next());
if (nymph.getHeight() <= b && nymph.getHeight() >= a && nymph.getAge() >= c && nymph.getAge() <= d){
// 如果符合年龄和升高,填入列表
list.add(nymph);
}
for (int j = 0; j < list.size()-1; j++) {
if (list.get(j).equals(nymph)){
// 如果重复,删除列表
list.remove(nymph);
}
}
}
Mycomparable mycomparable = new Mycomparable();
list.sort(mycomparable);
for (Nymph n:list
) {
System.out.println(n.getName() + " " + n.getHeight() + " " + n.getAge() + " " + n.getPhone());
}
}
}
class Mycomparable implements Comparator<Nymph>{
@Override
public int compare(Nymph o1, Nymph o2) {
if (o1.getHeight() != o2.getHeight()){
return o1.getHeight() - o2.getHeight();
}else
return o2.getAge()-o1.getAge();
}
}
class Nymph{
private String name;
private int height;
private int age;
private String phone;
public Nymph() {
}
public Nymph(String name, int height, int age, String phone) {
this.name = name;
this.height = height;
this.age = age;
this.phone = phone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Nymph nymph = (Nymph) o;
return height == nymph.height && age == nymph.age && Objects.equals(name, nymph.name) && Objects.equals(phone, nymph.phone);
}
@Override
public int hashCode() {
return Objects.hash(name, height, age, phone);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return " " +
" " + name + ' ' +
" " + height +
" " + age +
" " + phone + ' ' +
'}';
}
}
第三道案例:统计文字中的单词数量并按出现次数排序
题目描述:
现需要统计若干段文字(英文)中的不同单词数量。
如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。**注1:**单词之间以空格(1个或多个空格)为间隔。
**注2:**忽略空行或者空格行。
**注3:**单词大小写敏感,即’word’与’WORD’是两个不同的单词 。
输入说明
若干行英文,最后以!!!!!
为结束。
输出说明
不同单词数量。
然后输出前10个单词(按字母顺序),如果所有单词不超过10个,则将所有的单词输出。
输入样例
Failure is probably the fortification in your pole
It is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you Are wondering whether new money it has laid
background Because of you, then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!!!
输出样例
49
Are
Because
Failure
It
a
alert
and
are
as
at
package Day14.Test03;
import java.util.*;
public class Words {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 使用TreeSet直接去重加排序
TreeSet<String> set = new TreeSet<>(new MyComparable());
while (true){
String str1 = sc.next();
if (str1.equals("!!!!!")){
break;
}else
set.add(str1);
}
System.out.println(set.size());
// 要求多与10个只输出10个
int i = 10;
for (String s:set
) {
i--;
System.out.println(s);
if (i == 0){
break;
}
}
}
}
class MyComparable implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}