jmu-Java-PTA题解 (exam1-java基础-Q4-身份证信息管理) 网安2312陈卓
问题要求
本题目要求使用ArrayList列表实现对身份证信息的管理。
-
输入add,然后输入整数n,代表往列表中加入n个身份证信息。增加时,需判定身份证信息是否非法(去除左右空格后,身份证字符串长度不等于18)。
如果不存在,则直接添加到列表尾部。如果存在则不添加。 -
输入del,然后输入身份证字符串idStr,代表从列表中删除该身份证信息。
-
输入search,然后输入身份证字符串idStr,代表在列表中查找该身份证信息,如果查找到,输出下标,否则输出-1。
-
输入info,将列表中的元素个数输出,并将每个元素打印出来。
-
输入clear,将列表中所有元素清楚。
输入样例:
add
8
330226196605054190
34080019810819327X
330226196605054190
34080019810819327X
653222196603062607
2312
653222196603062607
444444444444444
info
del
330226196605054191
del
330226196605054190
search
330226196605054191
search
34080019810819327X
clear
info
end
输出样例:
exist
exist
exist
3 add success
3
330226196605054190
34080019810819327X
653222196603062607
del failed
del success
-1
0
0
关键点
- 数据合法性检查:在添加身份证信息时,需要检查身份证字符串去除空格后的长度是否为 18,并且判断该身份证信息是否已存在于列表中。
- ArrayList的使用:利用ArrayList的动态扩容特性来存储身份证信息,同时使用其提供的contains、remove、indexOf等方法实现添加、删除、查找等操作。
- 输入处理:使用Scanner类从控制台读取输入,并根据不同的操作指令进行相应的处理。
解题步骤
第一步:初始化数据结构和输入读取器
使用Scanner类读取输入,并创建一个ArrayList来存储身份证信息。
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
ArrayList<String> arr = new ArrayList<>();
第二步:处理输入指令
在main方法中,通过Scanner读取输入的联系人数量n,再循环读取n行联系人信息数据,每行数据创建一个Person对象并添加到ArrayList中。最后使用Collections.sort方法对列表进行排序,遍历列表并输出每个Person对象的信息。
while (in.hasNext()) {
String e = in.next();
switch (e) {
case "add":
int n = in.nextInt();
int count = 0;
for (int i = 0; i < n; i++) {
String sss = in.next().trim();
if (sss.length() == 18 && !arr.contains(sss)) {
System.out.println("exist");
count++;
arr.add(sss);
}
}
System.out.println(count + " add success");
break;
case "del":
String idStr = in.next();
if (arr.remove(idStr)) {
System.out.println("del success");
} else {
System.out.println("del failed");
}
break;
case "search":
String searchId = in.next();
int index = arr.indexOf(searchId);
if (index != -1) {
System.out.println(index);
} else {
System.out.println("-1");
}
break;
case "info":
System.out.println(arr.size());
for (String x : arr) {
System.out.println(x);
}
break;
case "clear":
arr.clear();
break;
default:
break;
}
if ("end".equals(e)) {
break;
}
}
整体流程图:

整体代码:
import java.util.Scanner;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
ArrayList<String> arr = new ArrayList<>();
while(in.hasNext()){
String e = in.next();
switch(e){
case "add":
int n = in.nextInt();
int count = 0;
for(int i=0; i<n ;i++){
String sss = in.next().trim();
if(sss.length() == 18 && !arr.contains(sss)){
System.out.println("exist");
count++;
arr.add(sss);
}
}
System.out.println(count+" add success");
break;
case "del":
String idStr = in.next();
if(arr.remove(idStr)){
System.out.println("del success");
}else{
System.out.println("del failed");
}
break;
case "search":
String searchId = in.next();
int index = arr.indexOf(searchId);
if (index!= -1) {
System.out.println(index);
} else {
System.out.println("-1");
}
break;
case "info":
System.out.println(arr.size());
for(String x:arr){
System.out.println(x);
}
break;
case "clear":
arr.clear();
break;
default:
break;
}
if ("end".equals(e)) {
break;
}
}
}
}
思考:在这个身份证信息管理的程序中,ArrayList的使用是核心。ArrayList是Java集合框架中常用的动态数组实现,它提供了丰富的方法来管理和操作数据。通过使用ArrayList,我们可以方便地实现身份证信息的添加、删除、查找等操作。数据合法性检查也是保证程序正确性的重要环节,在添加身份证信息时,我们检查身份证字符串的长度是否为 18,并且判断该身份证信息是否已存在于列表中。这样可以避免非法数据的加入,保证数据的准确性和完整性。在实际应用中,如用户注册系统、身份验证系统等,都需要进行类似的数据合法性检查。输入处理部分使用Scanner类从控制台读取输入,并根据不同的操作指令执行相应的操作。这种方式使得程序具有良好的交互性,用户可以通过输入不同的指令来管理身份证信息。在实际开发中,对于需要与用户进行交互的程序,如命令行工具、交互式应用等,都可以采用类似的输入处理方式。此外,程序的可扩展性也是一个重要的考虑因素。如果后续需要添加更多的操作指令,如修改身份证信息、对身份证信息进行排序等,只需要在switch语句中添加相应的分支即可,而不需要对整个程序结构进行大规模改动。这种可扩展性使得程序能够适应不断变化的需求,提高了程序的灵活性和可维护性。在软件开发的全生命周期中,可扩展性是衡量一个优秀程序设计的重要标准之一。

浙公网安备 33010602011771号