-1

...output:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out-of-bounds for length 1 at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source) at java.base/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) ...output

My program is a to-do list and is as follows:

...Java............................................
import java.util.Scanner; import 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......................................................................

I get the above error message as soon as I write the to_do.get(i) at the very end of the program.

Another bonus question is how to end the while loop without affecting the output of the final ArrayList?

4

1 回答 1

2

您的 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();
    }
}
于 2018-09-30T20:58:17.050 回答