2013-03-31 43 views
0

我有以下簡單的Java語句:爲什麼這個Java foreach循環拋出錯誤?

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

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html – noahlz

回答

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文檔。

0

foreach循環遍歷數組的,而不是索引。因此,grade102
您正在嘗試訪問4項數組的103 rd(從0開始)的元素。
這不會工作

1

它拋出索引超出邊界錯誤,因爲「等級」變量已經是數組內的值,而不是索引。

因此,將它打印出來罰款第一的System.out.println(),但此時你試圖做到這一點 的try/catch語句內

等級[102]

而且你的數組沒有那個索引。它的最大索引是3( - > 105)。

0

您的第一個打印聲明適當地使用了gradefor循環通過將數組中的每個值分配給grade進行迭代。

您的第二個打印語句使用grade作爲grades的索引。這是錯誤的,因爲grade是數組中的值,而不是索引。儘管您編寫的for循環比帶有索引的for循環簡單,但有時您需要知道索引,因此您可能需要重寫for循環。

相關問題