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

试图打印ArrayList的前4个元素时出现IndexOutOfBoundsException错误[重复]

伊富
2023-03-14

...output:
线程“main”java.lang.indexoutofboundsexception:在java.base/jdk.internal.util.preconditions.outofbounds(未知源)在java.base/jdk.internal.util.preconditions.outofbounds(未知源)在java.base/jdk.internal.util.preconditions.outoffbounds(未知源)在java.base/jdk.

我的程序是一个待办事项列表,如下所示:

...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));

            }

            }
    }
}

...爪哇.................................................................

当我在程序末尾写入to_do.get(I)时,就会得到上面的错误消息。

另一个额外的问题是如何在不影响最终ArrayList输出的情况下结束while循环?

共有1个答案

卜鹏
2023-03-14

您的for-loop尝试访问列表中尚不存在的值。这就是为什么您会得到indexoutofboundsException

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

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

可以使用break结束输入循环。通过先将输入赋值给局部变量,在将其添加到列表之前检查输入。例如,如果是空白(作为用户没有任何进一步输入的信号),则从while-loop执行break。

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();
    }
}
 类似资料:
  • 我不确定此错误消息的含义:*错误:请求成员开始在counter.std::映射

  • 问题内容: 我如何在arraylist“列表”中打印元素“ e”? 问题答案: 您是要打印整个列表还是要遍历列表的每个元素?两种打印您的类有意义的东西的方法都需要重写该类的方法(如其他答案所述)以返回有效结果。 此代码的输出是:

  • 我想从数组列表打印元素,但我得到错误的输出(.A@15db9742)

  • 这是我的错误信息。 希望帮助您了解部分以及如何在此上下文中正确实现它。

  • 所以我在做一个定时器包装函数,但是我在尝试打印参数的时候不断地得到错误。 我的计时器功能看起来是这样的: 理想的情况下,它也会打印kwargs,但显然这是一个完全不同的问题,尽管我会非常感谢如果有人帮助我做这件事。所以当没有一个论点的时候,我的结果很好: 给出:使用参数1000执行dummy_fn,取:0.2128157615661621 但是,如果我重新定义dummy_fn以获取更多的参数并传递

  • 在这个程序中,我必须打印1到100之间的素数。要遵循的方法是——要找出素数,用存储在数组中的前一个素数除以一个数。如果给定的数字在除以任何前一个素数时留下0作为余数,那么它就不是素数。如果不是,它就是一个素数,并将其添加到数组中。在程序中——我初始化了一个由100个数字组成的数组,并将1到100个数字存储在数组a中(步骤1)。是我将存储素数的数组。我在(步骤2)中存储了的前两个值。在(步骤3)中,