6-1 将学生对象按照学号降序排序
请阅读程序并补全源代码:先从键盘录入5个学生的数据,保存到容器对象ar中,然后按照学号降序排序之后输出。
本程序将下面的学生类Student对象按照学号降序排序:
import java.util.*;
class Student {
String number;
String name;
float score;
// Constructor
Student(String number1, String name1, float score1) {
number = number1;
name = name1;
score = score1;
}
// Used to print student details in main()
public String toString() {
return this.number + " " + this.name + " " + this.score;
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Student> ar = new ArrayList<Student>();
/* 请在这里补全代码,使程序完成指定的功能。 */
输入样例:
在这里输入5个学生的记录:
04031021 Zhang3 84
04031013 Li4 73
04031018 Wang5 98
04031038 Ma6 65
04031029 Chen7 96
输出样例:
04031038 Ma6 65.0
04031029 Chen7 96.0
04031021 Zhang3 84.0
04031018 Wang5 98.0
04031013 Li4 73.0
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
String number = scanner.next();
String name = scanner.next();
float score = scanner.nextFloat();
ar.add(new Student(number, name, score));
}
ar.sort((s1, s2) -> s2.number.compareTo(s1.number)); /*这是排序*/
for (Student student : ar) {
System.out.println(student);
}
}
}
7-1 人名地名排序
从键盘输入若干人名、地名或者国家名,要求按照升序排序之后输出。
输入格式:
7(表示将输入7个人名或者地名)
Zhang3
Li4
Wang5
Ma6
Chen7
Shu8
Ren9
输出格式:
Chen7
Li4
Ma6
Ren9
Shu8
Wang5
Zhang3
输入样例:
5
Xi'an
HanZhong
BaoJi
Yan'an
WeiNan
输出样例:
BaoJi
HanZhong
WeiNan
Xi'an
Yan'an
这是一个不用容器的方法
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
String []name=new String[a];
int i;
for(i=0;i<a;i++){
String n=scanner.next();
name[i]=n;
}
Arrays.sort(name);/*升序排序*/
for(i=0;i<a;i++){
System.out.println(name[i]);
}
}
}
这里是一个用容器的方法
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
List<String>names=new ArrayList<>();/*创建一个容器,用于存储String类型的数据*/
for(int i=0;i<n;i++){
names.add(scanner.next());
}
names.sort(Comparator.naturalOrder());/*排序*/
for(String name:names){
System.out.println(name);
}
}
}
7-3 电话号码同步(Java)
文件phonebook1.txt和phonebook2.txt中有若干联系人的姓名和电话号码。请你设计一个程序,将这两个文件中的电话号码同步。(所谓同步,就是将两个文件中的电话号码合并后剔除相同的人名和电话号码。请将同步后的电话号码按照姓名拼音顺序排序后保存到文件phonebook3.txt中。)
由于目前的OJ系统暂时不能支持用户读入文件和写文件,我们编写程序从键盘输入文件中的姓名和电话号码,当输入的单词为end时,表示文件结束。将同步后的电话号码按照姓名拼音顺序排序后输出。
输入格式:
张三 13012345678
李四 13112340000
王五 13212341111
马六 13312342222
陈七 13412343333
孙悟空 13512345555
end (表示文件phonebook1.txt结束)
张三 13012345678
孙悟空 13512345555
王五 13212341111
陈七 13412343333
唐三藏 13612346666
猪悟能 13712347777
沙悟净 13812348888
end (表示文件phonebook2.txt结束)
输出格式:
陈七 13412343333
李四 13112340000
马六 13312342222
沙悟净 13812348888
孙悟空 13512345555
唐三藏 13612346666
王五 13212341111
张三 13012345678
猪悟能 13712347777
输入样例:
Zhang3 13012345678
Li4 13112340000
Wang5 13212341111
Ma6 13312342222
Chen7 13412343333
SunWuKong 13512345555
end
Zhang3 13012345678
SunWuKong 13512345555
Wang5 13212341111
Chen7 13412343333
TangSanZang 13612346666
ZhuWuneng 13712347777
ShaWuJing 13812348888
end
输出样例:
Chen7 13412343333
Li4 13112340000
Ma6 13312342222
ShaWuJing 13812348888
SunWuKong 13512345555
TangSanZang 13612346666
Wang5 13212341111
Zhang3 13012345678
ZhuWuneng 13712347777
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
TreeMap<String,Long>map=new TreeMap<>(((o1,o2)->{
String s1,s2;
s1=(String)o1;
s2=(String)o2;
return s1.compareTo(s2);
}));
String pinyin;
String[] data=new String[2];
while(true){
pinyin=scanner.nextLine();
if(pinyin.substring(0,3).equals("end")){
break;
}
data=pinyin.split(" ");
map.put(data[0],Long.parseLong(data[1]));
}
while(true){
pinyin=scanner.nextLine();
if(pinyin.substring(0,3).equals("end")){
break;
}
data=pinyin.split(" ");
map.put(data[0],Long.parseLong(data[1]));
}
Set<String>keys=map.keySet();
for(String key:keys){
System.out.println(key+" "+map.get(key));
}
}
}
7-3 找出足球赛对阵方
2014年世界杯足球赛在6月24日星期二小组赛赛程如下所示:
Australian VS Spain; Holland VS Chile; Cameroon VS Brazil; Croatia VS Mexico
请你编写一个简单的C++或Java程序,当输入其中任何一个国家的名字就能找出与其对阵的国家名。例如,输入“Holland”,就能找到对阵方是“Chile”。
输入格式:
Holland
输出格式:
Holland team's rival is Chile.
输入样例:
Germany
输出样例:
Germany's team has no match today.
下面先看一个用switch case语句解决的代码
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
switch(name){
case "Australian":
System.out.print(name+" team's rival is Spain");
break;
case "Spain":
System.out.print(name+" team's rival is Australian");
break;
case "Holland":
System.out.print(name+" team's rival is Chile.");
break;
case "Chile":
System.out.print(name+" team's rival is Holland.");
break;
case "Cameroon":
System.out.print(name+" team's rival is Brazil.");
break;
case "Brazil":
System.out.print(name+" team's rival is Cameroon.");
break;
case "Croatia":
System.out.print(name+" team's rival is Mexico.");
break;
case "Mexico":
System.out.print(name+" team's rival is Croatia.");
break;
default:
System.out.print(name+"'s team has no match today.");
}
}
}
一定要记得看清题目要求,结尾是否需要加上句号。
下来看看这个用容器解决这个问题的代码
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
Map<String,String>matches=new HashMap<>();
matches.put("Australian","Spain");
matches.put("Holland","Chile");
matches.put("Cameroon","Brazil");
matches.put("Croatia","Mexico");
matches.put("Spain","Australian");
matches.put("Chile","Holland");
matches.put("Brazil","Cameroon");
matches.put("Mexico","Croatia");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
if(matches.containsKey(name)){
System.out.print(name+" team's rival is "+matches.get(name)+".");
}
else{
System.out.print(name+" team has no match today.");
}
}
}
Map<String, String> matches = new HashMap<>();
matches.put("Australian", "Spain");
matches.put("Holland", "Chile");
matches.put("Cameroon", "Brazil");
matches.put("Croatia", "Mexico");
这部分代码是创建了一个 Map 对象 matches ,并向其中添加了四组键值对。
键分别是四个国家的名称("Australian"、"Holland"、"Cameroon"、"Croatia"),而对应的值则是它们在该赛程中的对阵国家的名称("Spain"、"Chile"、"Brazil"、"Mexico")。这样就可以通过键(国家名称)快速地获取到其对阵的国家名称。
在 Java 中,键值对主要通过 Map 接口及其实现类来实现。
以下是对 Java 键值对的详细解释:
概念:
- 键(Key):用于唯一标识一个值。以上题为例(是四个国家的名称("Australian"、"Holland"、"Cameroon"、"Croatia"))
- 值(Value):与键相关联的数据。(以上题为例是对阵国家的名称("Spain"、"Chile"、"Brazil"、"Mexico")
常见实现类:
- HashMap :基于哈希表实现,查找、插入、删除效率较高,但不保证元素的顺序。
- TreeMap :基于红黑树实现,会对键进行排序,可实现有序的键值对存储。
主要特点和操作:
- 添加元素:使用 put(key, value) 方法。
- 获取元素:通过 get(key) 方法根据键获取对应的值。
- 检查键是否存在: containsKey(key) 方法。
- 删除元素: remove(key) 方法。
- 获取键集合: keySet() 方法返回包含所有键的集合。
- 获取值集合:通过遍历 Map 获取所有值。
在实际应用中,键值对结构非常灵活,可以方便地根据特定键快速查找、存储和管理相关联的值,适用于各种场景,如配置信息存储、缓存等。
在 Java 中,可以使用 Map 接口来实现键值对的存储和操作。常见的实现类有 HashMap 、 TreeMap 等。
以下是一个简单的示例代码,展示如何使用 HashMap 存储键值对并进行一些基本操作:
import java.util.HashMap;
import java.util.Map;public class JavaKeyValueExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();// 添加键值对
map.put("key1", 10);
map.put("key2", 20);// 获取值
int value1 = map.get("key1");
int value2 = map.get("key2");// 检查键是否存在
boolean containsKey = map.containsKey("key3");// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
}
}