[Java]PTA:jmu-Java-02基本语法-03-身份证排序
·
- 输入n,然后连续输入n个身份证号。
- 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出
exit并退出。
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。
注意:处理输入的时候,全部使用Scanner的nextLine()方法,以免出错。
输入样例:
6
410425198309308225
320203197206115011
431227196108033146
330226196605054190
34080019810819327X
320111197112301539
sort1
sort2
e
输出样例:
1961-08-03
1966-05-05
1971-12-30
1972-06-11
1981-08-19
1983-09-30
431227196108033146
330226196605054190
320111197112301539
320203197206115011
34080019810819327X
410425198309308225
exit
代码如下:
import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
String[] container=new String[n];
for(int i=0;i<n;i++)
{
container[i]=sc.nextLine();
}
while(true)
{
String choice=sc.nextLine();
if("sort1".equals(choice)){
String[] birthdays=new String[n];
for(int i=0;i<n;i++)
{
String year=container[i].substring(6,10);
String month=container[i].substring(10,12);
String day=container[i].substring(12,14);
birthdays[i]=year+"-"+month+"-"+day;
}
Arrays.sort(birthdays);
for(String b:birthdays){
System.out.println(b);
}
}else if("sort2".equals(choice))
{
String[] sortedIds=container.clone();
Arrays.sort(sortedIds,new Comparator<String>()
{
public int compare(String id1,String id2)
{
String birth1=id1.substring(6,14);
String birth2=id2.substring(6,14);
return birth1.compareTo(birth2);
}
});
for(String id:sortedIds){
System.out.println(id);
}
}else{
System.out.println("exit");
break;
}
}
sc.close();
}
}
学习心得:
1、数组的 clone() 方法:用来创建一个与原数组长度相同、内容完全一致的新数组。
2、 Java 的 Arrays.sort()(自定义 Comparator)与 C 语言的 qsort(compare 函数)作用非常相似,都是通过传入 “比较规则” 来实现自定义排序。
Arrays.sort() 方法的语法格式:
Arrays.sort(要排序的数组, 比较器);
// 对应我的代码:
Arrays.sort(sortedIds, new Comparator<String>() { ... });
第一个参数:sortedIds 是要排序的数组。
第二个参数:new Comparator<String>() { ... } 是 “比较器”,一个包含比较规则的对象。
Comparator 是接口,不能直接用,必须用 new 创建具体的对象才能使用。
<>里的内容要和我们所要比较的对象的类型一致。比如我这里比较的是字符串的大小,所以是<String>。
创建对象的同时,要直接把 compare 的内容也直接写出来。
new Comparator<类型>() {
// 必须实现compare方法,内容就是比较规则
public int compare(类型 a, 类型 b) {
// 比较逻辑,返回负数/0/正数
}
};
最后,因为这个 “比较器对象” 是作为参数传给 Arrays.sort 的,所以整个new Comparator...都要放在 Arrays.sort 的参数里,用右括号闭合。
更多推荐
所有评论(0)