为了账号安全,请及时绑定邮箱和手机立即绑定

尝试打印 ArrayList 的前 4 个元素时出现 IndexOutOfBounds

尝试打印 ArrayList 的前 4 个元素时出现 IndexOutOfBounds

元芳怎么了 2021-10-20 14:49:59
...输出:线程“main”中的异常 java.lang.IndexOutOfBoundsException:在 java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source) at java.base/ 的长度为 1 的索引 1 越界jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source) at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source) at java.base/java.util.Objects.checkIndex(Unknown Source) at java。 base/java.util.ArrayList.get(Unknown Source) at HelloWorld.main(HelloWorld.java:27) ...输出我的程序是一个待办事项清单,如下:...Java..................................导入 java .util.Scanner; 导入 java.util.ArrayList;/** * @author Troy * */public class HelloWorld {    /** A very simple to-do list that asks for input and then prints out the  list      * in the form of an ArrayList: eg:     Here is today's to-do list:     [Wake up, Walk the dog,Eat breakfast, Make the bed]      */    public static void main(String[] args) {        // I chose an ArrayList because the size does not have to be predetermined.        ArrayList<String> to_do = new<String>ArrayList();        System.out.println("What would you like to add to your to-do list?");        Scanner user_input = new Scanner(System.in);        //While the user_input still has entries, perform the following:        while (user_input.hasNextLine()) {            //Add next entry in the to-do list(user_input) to the ArrayList            to_do.add(user_input.nextLine());            System.out.println("\n");            /**Print out the ArrayList(to_do) 4 elements at a time. */            for (int i = 0; i < 5; i++ ) {                System.out.println("Your list for today is: " + "\n" + to_do.get(i));            }            }    }}......Java...................................... ……………………一旦我在程序的最后编写 to_do.get(i) ,我就会收到上述错误消息。另一个额外的问题是如何在不影响最终 ArrayList 的输出的情况下结束 while 循环?
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

您的 for 循环尝试访问列表中尚不存在的值。这就是为什么你得到一个IndexOutOfBoundsException.


如果您将 for 循环中的测试表达式替换为检查列表大小的内容,而不是将其硬编码为 5,它将起作用:


for (int i = 0; i < to_do.size(); i++)

您可以使用break. 在将输入添加到列表之前检查输入,首先将其分配给局部变量。例如,如果它是一个空格(作为用户没有任何进一步输入的信号),则从 while 循环中执行中断。


String input = user_input.nextLine();

if (" ".equals(input) || i == 4) {

    break;

}

to_do.add(input);

如果你想一次只打印 4 个条目,它看起来像这样:


System.out.println("Your list for today is: " + "\n");

for (int page = 0; page <= (to_do.size() / 4); page++) {

    for (int offset = 0; offset + page * 4 < to_do.size() && offset < 4; offset++) {

            System.out.println(to_do.get(page * 4 + offset));

        }

        user_input.nextLine();

    }

}


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信