当前位置: 首页 > 知识库问答 >
问题:

ArrayList的Java While循环无法获取数组中的数据

缑智敏
2023-03-14

我试图使用菜单循环比当我完成第一个选择一个我想在选择2中获得数据。它不能得到,这是一个错误。

线程“main”java.lang.indexoutOfboundsException:在java.base/jdk.internal.util.preconditions.outofbounds(preconditions.java:64),在java.base/jdk.internal.util.preconditions.outofboundscheckindex(preconditions.java:70),在java.base/jdk.internal.util.preconditions.checkindex(preconditions.java:248),在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;

    }


}

共有1个答案

於和志
2023-03-14

您的问题是您在while循环中创建了受感染的病人。这意味着您在每次回答菜单时都会重写您创建的数据。错误实际上表明,当您试图获取0元素时,您patient.children列表为空。所以我建议:

>

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

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

  •  类似资料:
    • 我有一个家庭作业。。。代码如下。。。有几个问题要问。。。提前谢谢。Java初学者。。。如果这看起来很笨拙,请不要笑 有没有办法对我问的每个问题使用我的IF语句,而不必为每个问题更改字符串名称? 有没有办法创建一个方法(?)对于那些如果语句,所以我不必为我问的每一个问题写出来? 如果用户在10秒内没有输入答案,我想有一个定时器提示他们回答,我该怎么做?

    • 我是java的新手,我正在编写这个简短的程序,您可以在其中猜测1到10之间的数字。正确的数字存储为整数。如果您猜测较低的数字,它应该说“正确的数字较高”,如果您猜测较高,它应该说“正确的数字较低”。这是我所拥有的: 所以很明显这是行不通的,因为如果你输入一个更小的数字,它会跳到下一个数字,即使这个数字更大,它也是正确的。那么,我如何解决这个问题,让它检查两个语句呢?抱歉解释得不好。谢了。

    • 问题内容: 在遍历列表的Python循环中,我们可以编写: 并巧妙地遍历列表中的所有元素。有没有办法知道循环中到目前为止我循环了多少次?例如,我要列出一个清单,在处理完10个元素之后,我想对它们进行处理。 我考虑过的替代方案可能是: 要么: 是否有更好的方法(就像)来获得到目前为止的迭代次数? 问题答案: pythonic的方法是使用:

    • 你好,亲爱的堆栈溢出,我刚刚启动了一个盖茨比网站,但我有通过传递给组件的数组循环的问题。 我有一个叫博客的盖茨比网页。js,在这个页面中,我展示了通过GraphQL检索到的博客标题。直接在博客中使用循环。我可以看到所有的标题。 我的blog.js圈是这样的 它从以下GraphQL查询中检索数据 而不是在博客中创建博客帖子预览。相反,我想使用一个组件来实现这一点。我创建了一个名为BlogPostRe

    • 我遇到了一个相当奇怪的问题,当我试图编码我的机器人的一个特定的部分!为了使其简单简短,我有一个包含各种属性的对象数组(参见代码中的示例)。我想要做的是获取数组中的所有特定属性(例如name)并将其打印到控制台中。我尝试使用一个简单的for循环进行循环,每一个成功的循环,我都要求控制台记录ArrayName[I].name!请参阅代码以获得澄清! 问题是它确实按预期记录了代码--例如,在本例中是Re

    • 问题内容: print_r($ samplearr)为包含3个项目的数组打印以下内容: 我想将它们放到HTML表中,所以我正在做一个foreach,但是没有达到我的期望: 正在返回: 这将是我想要的第一个输出: 要获得4722,我需要使用什么功能代替key($ item)? 问题答案: 尝试这个: