这是我现在的代码
for (int i = 0; i <= listOfPeople.length; i++){
String name = scnr.nextLine();
System.out.println("Person " + (i + 1) + ": ");
listOfPeople[i] = name;
}
人员列表是一个正确声明的字符串列表,其长度为用户发送的值。发生的错误是当我运行程序时,我得到了这个:
Person 1:
Jordan
Person 2:
Jordan
Person 3:
Jordan
Person 4:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at RGG.main(RGG.java:20)
我不太确定出了什么问题,但我已经尝试在for循环声明中删除=,然后我得到了这个输出:
Person 1:
Jordan
Person 2:
Jordan
Person 3:
在第三次提示后,代码继续进行,我无法输入任何内容。 有谁知道可能会发生什么?提前谢谢!
答案 0 :(得分:2)
删除此表达式=
中的i <= listOfPeople.length;
。它导致您访问不存在的数组元素。
for (int i = 0; i < listOfPeople.length; i++){
String name = scnr.nextLine();
System.out.println("Person " + (i) + ": ");
listOfPeople[i] = name;
}
完整示例:
public class PersonArrayTest {
public static void main(String[] args) {
String[] listOfPeople = new String[5];
assign(listOfPeople);
System.out.println(Arrays.toString(listOfPeople));
}
public static void assign(String[] listOfPeople) {
Scanner scnr = new Scanner(System.in);
for (int i = 0; i < listOfPeople.length; i++) {
String name = scnr.nextLine();
System.out.println("Person " + (i) + ": ");
listOfPeople[i] = name;
}
}
}
答案 1 :(得分:2)
使用此行
for (int i = 0; i <= listOfPeople.length; i++){
你正在推进一个超出数组末尾的长度为3的有效索引0-2。 3是无效索引。
删除=
后,您将获得更正后的版本:
for (int i = 0; i < listOfPeople.length; i++){
在运行数组末尾之前,在2
迭代之后停止,这是数组的结尾。
答案 2 :(得分:1)
更改此<=
登录for循环
for (int i = 0; i < listOfPeople.length; i++)
答案 3 :(得分:0)
我做了一个有根据的猜测,你正在使用Scanner#nextInt
来获取数组长度的输入。有点像这样:
String[] listOfPeople = new String[scnr.nextInt()];
我已经获得了这个,因为你的循环代码看起来像这样:
take input for i == 0 print prompt #1 take input for i == 1 print prompt #2 take input for i == 2 print prompt #3
但是你的输出显示了这个:
print prompt #1 take input for i == 1 print prompt #2 take input for i == 2 print prompt #3
所以实际上必须发生的是:
silently advance past whatever scnr is still retaining for i == 0 print prompt #1 take input for i == 1 print prompt #2 take input for i == 2 print prompt #3
nextInt
孤立一个换行符。 (除了nextLine之外,还会调用next_。)这就是为什么跳过你的第一个输入。在循环的第一次迭代中调用scnr.nextLine
只会使扫描程序超过最后一行。
将循环更改为:
// skip the last new line
scnr.nextLine();
// < not <=
for (int i = 0; i < listOfPeople.length; i++) {
// prompt before input
System.out.println("Person " + (i + 1) + ": ");
// you don't need that extra String
listOfPeople[i] = scnr.nextLine();
}