2013-10-14 65 views
0

我試圖找到一個整數數組中的最小值,但是當我這樣做時,我得到了一個arrayindexoutofbounds在一個地方,據我所知, t是數組索引的計數,只是索引和最小值的比較。代碼在下面的問題 部分:當我試圖找到最小值的數組時,我得到一個異常

} 
    System.out.println(sum); 

    int minste=tall[0]; 
    for (int i : tall){ 
     if(tall[i]<tall[0]){ //This is where the exception is made. But why? 
     minste=tall[i]; 
     } 
    } 
    System.out.println(minste); 
    } 
} 
+1

你是怎麼從你的最後一個職位瞭解有關增強的for循環? '我'不是一個索引。 –

回答

3

i已經是一個元素,只是用它。無需tall[i]

if(i < minste) {

這個循環是指: 「對於每個tallint」。

爲了更好地理解增強循環,想想這樣說:

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

將打印同樣的事情:

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

這就是爲什麼我們建議使用有意義的名稱爲變量,而不是i,請使用item,因此它將類似於「對於tall中的每個item」...

替代解決方案,以找到最小的值:

  1. 使用Arrays#sort
  2. 返回數組
+0

這隻會擺脫例外,但不能解決問題。它不會讓你成爲最小的元素。 –

+0

@RohitJain - 我認爲我做的編輯應該解決這個問題。 – SudoRahul

+0

謝謝,現在我更瞭解增強的for-loop了! – Makri

2

的第一個元素。當你使用for-each循環,爲什麼要使用索引?

if(tall[i]<tall[0]){ 

tall[i] - 給人的ArrayIndexOutOfBoundsException異常,因爲i是你的數組中的元素,而不是索引值。而這個值i肯定比你的數組長度長。

所有你需要做的是THI

int minste = tall[0]; 
for (int i : tall) { 
    if(i < minste) { 
     minste = i; 
    } 
} 
0

您正在使用for-each循環,但嘗試使用i作爲一個指標。 要正常工作,更改您的代碼

int minste = tall[0]; 
for (int i : tall) 
{ 
    if(i < minste) 
    { 
     minste = i; 
    } 
} 

int minste = tall[0]; 
for (int i = 0; i<tall.length; i++) 
{ 
    if(tall[i] < minste) 
    { 
     minste = tall[i]; 
    } 
} 
相關問題