jmu-Java-PTA题解 (exam1-java基础-Q4-身份证信息管理) 网安2312陈卓

问题要求

本题目要求使用ArrayList列表实现对身份证信息的管理。

  1. 输入add,然后输入整数n,代表往列表中加入n个身份证信息。增加时,需判定身份证信息是否非法(去除左右空格后,身份证字符串长度不等于18)。
    如果不存在,则直接添加到列表尾部。如果存在则不添加。

  2. 输入del,然后输入身份证字符串idStr,代表从列表中删除该身份证信息。

  3. 输入search,然后输入身份证字符串idStr,代表在列表中查找该身份证信息,如果查找到,输出下标,否则输出-1。

  4. 输入info,将列表中的元素个数输出,并将每个元素打印出来。

  5. 输入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语句中添加相应的分支即可,而不需要对整个程序结构进行大规模改动。这种可扩展性使得程序能够适应不断变化的需求,提高了程序的灵活性和可维护性。在软件开发的全生命周期中,可扩展性是衡量一个优秀程序设计的重要标准之一。

posted @ 2025-05-02 11:12  取名字比写博客还难  阅读(28)  评论(0)    收藏  举报