2011-08-11 54 views
3

這裏是我的代碼:'爲' 增強循環導致一個ArrayIndexOutOfBoundsException

import java.util.Scanner; 

public class Arrays { 
    public static void main(String[] args) { 
     Arrays psvm = new Arrays(); 
     psvm.start(); 
    } 

    public void start() { 
     Scanner ben = new Scanner(System.in); 
     int[] arr = new int[4]; 
     int[] arrs = new int[4]; 
     for (int i = 0; i < arr.length; i++) { 
      arr[i] = ben.nextInt(); 
     } 
     check(arr, arrs); 
    } 

    public void check(int arr[], int arrs[]) { 
     for (int i = 0; i < arr.length; i++) { 
      arrs[i] = arr[i]; 
     } 
     for (int i : arrs) { 
      System.out.println(arrs[i]); 
     } 
    } 
} 

增強for循環給人ArrayIndexOutOfBoundsException

for (int i : arrs) { 
    System.out.println(arrs[i]); 
} 

雖然這for循環語句的作品。爲什麼?代碼有什麼問題?

for (int i = 0; i < arrs.length; i++) { 
    System.out.println(arrs[i]); 
} 

回答

13

在這種情況下,i將被分配給陣列中的每個元件 - 它是索引到陣列。

你想要做的是:

for(int i : arrs) 
{ 
    System.out.println(i); 
} 

在代碼中,你要選擇由迭代對象引用的數組索引處的整數。換句話說,您的代碼相當於:

for(int idx = 0; idx < arrs.length; idx++) 
{ 
    int i = arrs[idx]; 
    System.out.println(arrs[i]); 
}