首页 > 解决方案 > ArrayList的Java While循环无法获取Array中的数据

问题描述

我正在尝试使用菜单循环,而不是当我完成第一个选择时,我想在选择 2 中获取数据。它无法获取,这是一个错误。

线程“主”java.lang.IndexOutOfBoundsException 中的异常:在 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal 的索引 0 超出了长度 0 的范围。 util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) 在 java.base/java.util.Objects.checkIndex(Objects.java: 373) 在 java.base/java.util.ArrayList.get(ArrayList.java:425) 在 craitid_19.main(craitid-19.java:38)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class craitid_19{
    public static void main(String [] args){
        while(true){
        System.out.println("1 - Insert");
        System.out.println("2 - Edit");
        System.out.println("3 - View");
        System.out.println("4 - Exit");
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();
        infected patient = new infected();

        switch (choice){
        case 1: 
            System.out.print("ID = ");
            int id = input.nextInt();
            System.out.print("name = ");
            String name = input.next();
            System.out.print("age = ");
            String age = input.next();
            System.out.print("gender = ");
            String gender = input.next();
            System.out.print("date = ");
            String date = input.next();
            System.out.print("province = ");
            String province = input.next();
            System.out.print("infectby = ");
            String infectby = input.next();
            patient.children.add(new normal(id, name, age, gender, date, province, infectby));
            System.out.print(patient.toString());
            continue;


        case 2:
            System.out.println("Insert ID");
            System.out.print(patient.children.get(0));

        case 4:
            System.out.println("Exiting Program...");
            System.exit(0);
            break;
        default :
             System.out.println("This is not a valid Menu Option! Please Select Another");
             break;
        }
        }
    }
}
class infected {    
    public int id;
    public String name;
    public String age;
    public String gender;
    public String date;
    public String province;
    public String infectby;
    public String type;

    public List<infected> children = new ArrayList<>();

    public infected(){
    }

    @Override
    public String toString()
    {
    String returnString = id + (",") + name + (",") + age + (",") + gender + (",") + date + (",") + province + (",") + infectby + (",") + type + System.lineSeparator();
    for (infected child : children) 
    returnString = child.toString() + System.lineSeparator();
    return returnString;
    }
}

class normal extends infected{
    public normal(int id, String name, String age, String gender, String date, String province, String infectby){
        type = "1";
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.date = date;
        this.province = province;
        this.infectby = infectby;

    }


}

标签: java

解决方案


您的问题是您在 while 循环内创建了受感染的患者。这意味着您每次回答菜单时都会覆盖您创建的数据。该错误实际上表明您的 Patient.children 列表为空,而您正在尝试获取 0 元素。所以我推荐:

  1. 将患者对象的初始化移出 while 循环(只需将其放在 while 之前)。

  2. 在尝试从中读取数据之前检查列表是否不为空。

  3. 对类使用 Java 命名约定(它们应该从大写字母开始——被感染而不是被感染等等)——这将使你的代码更具可读性。

推荐阅读