[英]Why is this Java foreach loop throwing errors?
我有以下簡單的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!
為什么循環會迭代到不在數組中的值? 我很困惑。
謝謝。
int grade
是數組中每個元素的值,而不是索引。
如果你想獲得int[] grades = {102, 105, 98, 105};
每個元素int[] grades = {102, 105, 98, 105};
你應該使用這樣的常規for
循環:
for (int i = 0; i < grades.length; i++) {
System.out.println(grades[i]);
}
這將起作用,因為數組中每個元素的索引范圍為0到3。
看一下增強的for loop
文檔。
拋出索引超出綁定錯誤,因為“grade”變量已經是數組內部的值,而不是索引。
所以它會在第一個System.out.println()上打印出來,但是你試圖在try / catch中做到這一點
等級[102]
而且你的數組沒有那個索引。 它的最大指數是3( - > 105)。
foreach循環迭代數組的值 ,而不是索引。
因此, grade
是102
。
你試圖訪問一個4項數組的第103 位 (從0開始)的元素。
那不行
您的第一個印刷聲明適當地使用grade
for
循環通過將數組中的每個值指定為grade
來迭代。
您的第二個印刷聲明使用grade
作為grades
的索引。 這是錯誤的,因為grade
是數組中的值,而不是索引。 盡管您編寫的for
循環比帶索引的for
循環更簡單,但有時您需要知道索引,因此您可能需要重寫for
循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.