这个问题在这里已经有答案了:
是什么导致java.lang.arrayindexoutofboundsexception以及如何防止它(26个答案)
上个月关门了。
嘿,伙计们,我不知道如何修复下面的代码,因为我得到一个区域出界异常,每次我运行它任何帮助将非常感谢修复这个thx。
int numberStudents = numberOfStudents();
System.out.println("");
int[] gradeOfStudent = gradeOfStudents(numberStudents);
方法如下
public static int[] gradeOfStudents(int numberStudents) {
Scanner input = new Scanner (System.in);
int[] grades = new int [numberStudents];
String[] name = new String[numberStudents];
for(int i = 0; i < numberStudents;) {
for(int j = 0; j < numberStudents; i++ ) {
System.out.print("Enter the name of the " + (i + 1) + " student: ");
name[i] = input.next();
System.out.print("Enter the " + (i + 1) + " student's grade: " );
grades[i] = input.nextInt();
}
}
return grades;
}
3条答案
按热度按时间yi0zb3m41#
问题出在你的问题上
gradeOfStudents()
方法。你有2个for
循环。你的第一个循环
numberOfStudents
次,第二个循环也运行numberOfStudents
次。真正的问题是,你知道
i++
对于每个迭代。所以你增加了i
至numberOfStudents * 2
. 但是你的数组只有一个大小numberOfStudents
.实际上,第二个循环没有意义,因为您不需要而且显然也不使用
j
. 一个循环就足够完成这个任务了。固定的代码段如下所示:但是通过这种方法,您可以看到实际上您放弃了
name
完全阵列。我想你不想那样。所以更面向对象的方法是,创建一个类
Student
,然后保存属性grade
以及name
.比如说:
然后创建并存储
new Student(grade, name)
你的每一个输入。lmvvr0a82#
移除j for循环,并将i++(增量i)添加到第一个for循环
}
2nbm6dog3#
在gradeofstudents(int)方法中有第二个循环:
如您所见,循环变量是'j',但它会在每个循环后更新'i',因此第一个循环中的i<numberstudents检查不再为每个'i'调用->它可能超出界限。
您似乎也没有使用“j”表示任何东西,整个循环可能是多余的。