ArrayList的Java While循环可以';无法获取数组中的数据
我尝试使用菜单循环,而不是当我完成第一个选项时,我想在选项2中获取数据。 无法获取,这是一个错误 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引0超出长度0的界限 位于java.base/jdk.internal.util.premissions.outOfBounds(premissions.java:64) 位于java.base/jdk.internal.util.premissions.outOfBoundsCheckIndex(premissions.java:70) 位于java.base/jdk.internal.util.premissions.checkIndex(premissions.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)ArrayList的Java While循环可以';无法获取数组中的数据,java,Java,我尝试使用菜单循环,而不是当我完成第一个选项时,我想在选项2中获取数据。 无法获取,这是一个错误 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引0超出长度0的界限 位于java.base/jdk.internal.util.premissions.outOfBounds(premissions.java:64) 位于java.base/jdk.internal.util.premissions.outOfBoundsCheckIndex(pr
import java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
克雷蒂德19级{
公共静态void main(字符串[]args){
while(true){
System.out.println(“1-插入”);
System.out.println(“2-编辑”);
System.out.println(“3视图”);
System.out.println(“4-退出”);
扫描仪输入=新扫描仪(System.in);
int choice=input.nextInt();
已感染患者=新感染();
开关(选择){
案例1:
系统输出打印(“ID=”);
int id=input.nextInt();
System.out.print(“name=”);
String name=input.next();
系统输出打印(“age=”);
String age=input.next();
系统输出打印(“性别=”);
字符串性别=input.next();
系统输出打印(“日期=”);
字符串日期=input.next();
系统输出打印(“省=”);
字符串province=input.next();
System.out.print(“infectby=”);
字符串infectby=input.next();
患者。儿童。添加(新正常人(id、姓名、年龄、性别、日期、省份、传染人));
System.out.print(patient.toString());
继续;
案例2:
System.out.println(“插入ID”);
System.out.print(patient.children.get(0));
案例4:
System.out.println(“退出程序…”);
系统出口(0);
打破
违约:
System.out.println(“这不是一个有效的菜单选项!请选择另一个”);
打破
}
}
}
}
类感染{
公共int id;
公共字符串名称;
公共字符串年龄;
社会性别;
公共字符串日期;
公营省;
公共字符串被感染;
公共字符串类型;
public List children=new ArrayList();
公众受感染(){
}
@凌驾
公共字符串toString()
{
String returnString=id+(“,”)+name+(“,”)+age+(“,”)+gender+(“,”)+date+(“,”)+province+(“,”)+infectby+(“,”)+type+System.lineSeparator();
适用于(受感染儿童:儿童)
returnString=child.toString()+System.lineSeparator();
返回字符串;
}
}
类正常扩展已感染{
公共正常值(整数id、字符串名称、字符串年龄、字符串性别、字符串日期、字符串省、字符串感染者){
type=“1”;
this.id=id;
this.name=名称;
这个。年龄=年龄;
这个。性别=性别;
this.date=日期;
这个省=省;
this.infectby=infectby;
}
}
您的问题是您在while循环中创建了受感染的患者。这意味着您将覆盖每次回答菜单时创建的数据。当您试图获取0元素时,该错误实际上表示patient.children列表为空。因此,我建议:
首先,您必须替换
继续代码>通过中断代码>然后,在第4行和第5行之间,您必须添加以下内容:
infected patient = new infected();
如果您想在每次循环重复时调用类的构造函数,则只需调用一次类和类的构造函数
infected patient,
在第13行中,您将替换您的:
patient = new infected();
只调用一次构造函数与每次循环重复调用构造函数有什么区别?
- 在第一种情况下,当您添加患者时,它将一直保留,直到您关闭程序
- 在第二种情况下,每次循环重复,您之前添加的患者都将丢失
明智地选择。
您还应该使用Java名称约定,类名称的第一个字母必须是大写。您是否使用了continue
而不是break
?另外,您在案例2中没有中断代码>在主方法之外。它是一个局部变量,在每个循环中都被实例化。是的,我忘了。在案例2中,我想检查ArrayList中的数据,但在案例2中加入break之前,它也有相同的错误。谢谢你,哈哈,我解决了这个错误。
patient = new infected();