簡體   English   中英

為什么這個Java foreach循環會拋出錯誤?

[英]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循環迭代數組的 ,而不是索引。

因此, grade102
你試圖訪問一個4項數組的第103 (從0開始)的元素。
那不行

您的第一個印刷聲明適當地使用grade for循環通過將數組中的每個值指定為grade來迭代。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM