PTA Java程序设计
7-6 jmu-Java-02基本语法-03-身份证排序
懒人一键copy
解题思路:
- 采用调用对象来实现身份证排序,定义两个类分别为sort1和sort2
- 在类中分别定义特有的方法来实现要求
- 在Main方法中判断输入的情况来调用不同对象的方法
1.输入
输入n,然后连续输入n个身份证号
分析:
- 定义整数n,并用数组存储身份证号、出生日期
- 使用for循环将身份证号存储到数组中
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] birth = new String[n];
String[] arr = new String[n];
//定义身份证数组
for (int i = 0; i < n; i++) {
arr[i] = sc.next();
}
2.判断输入
根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
分析:
- 根据题目可以理解到判断输入需要在while循环下进行
- 需要定义一个String类型的变量来进行判断
- 使用
equals
方法来判断是否是对应数值- 输入sort1则调用sort1类中的sort方法并传入参数
- 输入sort2则调用sort2类中的sort方法并传入参数
String str;
while (true) {
str = sc.next();
if (str.equals("sort1")) {
new sort1().sort(n, arr, birth);
} else if (str.equals("sort2")) {
//判断输入的值是否是sort2,是则打印升序身份证
new sort2().sort(n,arr,birth);
} else {
System.out.println("exit");
break;
}
}
3.输入sort1
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
分析:
- 创建类sort1,在类中定义
sort
方法并接收整数n、身份证号arr、出生日期birth- 使用for循环来将截取到的出生日期赋值给
birth
,并使用升序sort
方法来将出生日期升序- 打印出生日期
class sort1 {
public void sort(int n, String[] arr, String[] birth) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
birth[i] = arr[i].substring(6, 10) + "-" + arr[i].substring(10, 12) + "-" + arr[i].substring(12, 14);
//利用substring方法提取身份证上的出生日期,并用-连接
}
//判断输入的值是否是sort1,是则打印升序生日
Arrays.sort(birth);
for (int i = 0; i < n; i++) {
System.out.println(birth[i]);
}
}
}
4.输入sort2
输入sort2,将所有身份证按照里面的年月日升序输出。
分析:
- 创建类sort2,在类中定义
sort
方法并接收整数n、身份证号arr、出生日期birth- 使用for循环来将截取到的出生日期赋值给
birth
,并使用升序sort
方法来将出生日期升序- 用双重for循环来判断身份证是否包含出生日期,包含则将值打印
substring
方法截取字符串中,介于两个指定下标之间的字符。contains
方法用于判断字符串中是否包含指定的字符或字符串。如果包含指定的字符或字符串返回 true,否则返回 false。
class sort2 {
void sort(int n, String[] arr, String[] birth) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
birth[i] = arr[i].substring(6, 10) + arr[i].substring(10, 12) + arr[i].substring(12, 14);
//利用substring方法提取身份证上的出生日期,并合并起来00000019830930000
//19830930
}
Arrays.sort(birth);//升序
for (int i = 0; i < n; i++) {
//此循环为遍历次数
for (int j = 0; j < n; j++) {
//此循环为遍历匹配,出生日期为升序状态,遍历匹配身份证哪个索引包含该值
if (arr[j].contains(birth[i])) {
//判断arr身份证是否包含出生日期birth,包含则返回ture
System.out.println(arr[j]);
//返回true则将该数组的索引值打印出来
}
}
}
}
}
懒人一键copy
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] birth = new String[n];
String[] arr = new String[n];
String str;
//定义身份证数组
for (int i = 0; i < n; i++) {
arr[i] = sc.next();
}
while (true) {
str = sc.next();
if (str.equals("sort1")) {
new sort1().sort(n, arr, birth);
} else if (str.equals("sort2")) {
//判断输入的值是否是sort2,是则打印升序身份证
new sort2().sort(n,arr,birth);
} else {
System.out.println("exit");
break;
}
}
}
}
class sort1 {
void sort(int n, String[] arr, String[] birth) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
birth[i] = arr[i].substring(6, 10) + "-" + arr[i].substring(10, 12) + "-" + arr[i].substring(12, 14);
//利用substring方法提取身份证上的出生日期,并用-连接
}
//判断输入的值是否是sort1,是则打印升序生日
Arrays.sort(birth);
for (int i = 0; i < n; i++) {
System.out.println(birth[i]);
}
}
}
class sort2 {
void sort(int n, String[] arr, String[] birth) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
birth[i] = arr[i].substring(6, 10) + arr[i].substring(10, 12) + arr[i].substring(12, 14);
//利用substring方法提取身份证上的出生日期,并合并起来00000019830930000
//19830930
}
Arrays.sort(birth);//升序
for (int i = 0; i < n; i++) {
//此循环为遍历次数
for (int j = 0; j < n; j++) {
//此循环为遍历匹配,出生日期为升序状态,遍历匹配身份证哪个索引包含该值
if (arr[j].contains(birth[i])) {
//判断arr身份证是否包含出生日期birth,包含则返回ture
System.out.println(arr[j]);
//返回true则将该数组的索引值打印出来
}
}
}
}
}