java - 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;
}
}
解决方案
您的问题是您在 while 循环内创建了受感染的患者。这意味着您每次回答菜单时都会覆盖您创建的数据。该错误实际上表明您的 Patient.children 列表为空,而您正在尝试获取 0 元素。所以我推荐:
将患者对象的初始化移出 while 循环(只需将其放在 while 之前)。
在尝试从中读取数据之前检查列表是否不为空。
- 对类使用 Java 命名约定(它们应该从大写字母开始——被感染而不是被感染等等)——这将使你的代码更具可读性。
推荐阅读
- sparql - SPARQL 语法的扩展
- amazon-web-services - 如何使用 boto3 查找“担任角色登录 URL”
- java - 为什么我们需要使用 awaitTermination 而不仅仅是 shutdownNow()?
- macos - Automator - 使用我的工作流应用程序的当前路径设置变量
- javascript - 如何在表单中使用 jquery 制作一个赞按钮,以便将其保存到数据库并更改赞按钮的样式?
- logging - 如何将日志和指标转发到 VMware VCH(自定义光子操作系统)上的外部数据库
- php - 仅在重定向时打开模式
- reactjs - 在持有反应原生可触摸组件的同时不断调用函数
- json - 如何从 ResponseEntity 获取 json 文件?
- c# - 如何在 Moq 中为单元测试注入依赖项