2012-04-02 85 views
1

我在我的第二個打印行中得到一個異常。爲每個循環異常

int num[] = {50,20,45,82,25,63}; 
System.out.print("Given number : "); 
for(int d:num){ 
System.out.print(" " + num[d]); 
} 

控制檯輸出是

Given number : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50 

爲什麼不是D採取所有陣列元件,但只有50?

+0

當您使用的foreach語法:for(INT d:NUM){//等} d是不是它已經索引的價值指數! – MrJames 2012-04-02 11:07:50

回答

6

for(int d:num)循環每一個項目是由dnum[d]

代表所以,這裏是它應該怎麼做。

for(int d:num){ 
    System.out.print(" " + d); 
} 

一個簡單的試運行將告訴你,你出了問題。

對於第一循環的語句將回落到num[50]這是不是可在任何地方,所以你得到的異常。


但是,如果你嘗試是使用索引,那麼簡單的一招之下將這樣的伎倆

int index = 0; 
for(int d:num){ 
    System.out.print(" " + num[index++]); 
} 

但老實說,我相信,這是正確的解決問題。

3

In for each loop num [any index] is not required。它只是從第一個索引到最後一個索引,並將它們分配給變量d。所以你只需要打印值d。

for(int d:num){ 
System.out.print(" " + d); 
} 
1

使用增強的for循環中,您可以直接在您的示例使用varable「d」:

System.out.print(d); 

你會得到一個ArrayIndexOutOfBound的原因是num[d]嘗試存取權限的50位上的第一次迭代數組中。 (這是無界的)。

0

在使用每個循環時,您不應該使用數組索引。

在代碼中,

int num[] = {50,20,45,82,25,63}; 
System.out.print("Given number : "); 
for(int d:num) 
{ 
    System.out.print(" " + num[d]); 
} 

在第一次迭代將導致d = 50,這是您的期望的結果。如果使用num[d],則會導致num[50],這是錯誤的索引。

相反,使用下面的代碼

for(int d:num) 
{ 
    System.out.print(" " + d); 
}