我有以下简单的Java语句:
public static void main(String[] args)
{
int[] grades = {102, 105, 98, 105};
Sorts.selectionSort(grades);
for (int grade : grades) {
// {
System.out.println(grade);
try {
System.out.print(grades[grade] + " ");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Error!");
}
}
我得到以下输出:
102
Error!
105
Error!
98
Error!
105
Error!
为什么循环会迭代到不在数组中的值?我很困惑。
谢谢。
答案 0 :(得分:1)
int grade
是数组中每个元素的值,而不是索引。
如果你想获得int[] grades = {102, 105, 98, 105};
的每个元素,你应该使用这样的常规for
循环:
for (int i = 0; i < grades.length; i++) {
System.out.println(grades[i]);
}
这将起作用,因为数组中每个元素的索引范围为0到3。
查看enhanced for loop
文档。
答案 1 :(得分:1)
抛出索引超出绑定错误,因为“grade”变量已经是数组内部的值,而不是索引。
所以它会在第一个System.out.println()上打印出来,但是你试图这样做 在try / catch
中成绩[102]
你的数组没有那个索引。它的最大指数是3( - > 105)。
答案 2 :(得分:0)
foreach循环迭代数组的值,而不是索引。
因此,grade
为102
您正在尝试访问4项数组的103 rd (从0开始)元素。
这不会起作用
答案 3 :(得分:0)
您的第一个打印语句恰当地使用grade
。 for
循环通过将数组中的每个值分配给grade
来进行迭代。
您的第二个打印语句使用grade
作为grades
的索引。这是错误的,因为grade
是数组中的值,而不是索引。尽管您编写的for
循环比带有索引的for
循环更简单,但有时您需要知道索引,因此您可能希望重写for
循环。