2012-11-15 59 views
2

我已經看過其他問題,但是,我這裏面臨不完全的問題, 這是當前的代碼,我有發現的最大值和陣​​列

public class Qn3 { 
    public static void displayHighestMark(String[] names,int[] marks, int count) 
    { 
     int mark = 0; 
     int currentArrayPosition; 
     for(int i=0;i <= names.length;i++) 
     { 

      if(mark <= marks[i]) 
       mark = marks[i]; 
      currentArrayPosition = i; 
     } 
     System.out.println(name[i]+" with marks "+mark); 
    } 

    public static void main(String[] args) 
    { 
     String[] names = new String[]{"jack","hello","A","b","c","d"};// = new String[]; 

     int[] marks = new int[]{1,2,3,8,5,6}; 
     displayHighestMark(names,marks, 45); 
    } 

} 

所以基本上我試圖找到標記數組中的最高標記。但我正在逐漸ArrayIndexOutOfBoundsException異常

的厚望
+0

哦,男孩,你不希望那裏在Java中的高階編程? – akuhn

回答

5
for(int i=0;i <= names.length;i++) 

應該

for(int i=0;i < names.length;i++) 

因爲你正在試圖獲得marks爲這是你在這ArrayIndexOutOfBoundsException範圍之外的索引。數組索引從0開始,因此當您執行循環和查找時,始終需要查找<而不是<=

請閱讀此tutorial

編輯:

if(mark <= marks[i]) 
{ 
       mark = marks[i]; 
      currentArrayPosition = i; 
} 
+0

tks爲那請參閱我編輯的問題我試圖在名稱數組中顯示相應的值。我的意思是說,如果數組中的最高值是在索引4中,那麼我想顯示相同索引的名稱數組的數組值。 – noobprogrammer

+0

@noobprogrammer:你的編輯沒有反映從for循環移除=。我會建議先做出改變並運行你的程序。 – kosa

+0

哦,不,不,我不想離開它,所以未來的用戶會知道這個線程的全部目的,這就是爲什麼我把它留在那裏的原因,但我用它給你的解決方案運行完美,但仍然面臨第一個評論問題,tks – noobprogrammer

0

更改環路

for(int i=0;i < names.length;i++) 

此外,你爲什麼需要count變量方法則params的一個。你沒有使用它。

0

你應該改變

for(int i=0;i <= names.length;i++) 

for(int i=0;i < names.length;i++) 

,因爲你正在試圖訪問陣列以外的項目時可變i等於names.length因爲數組的索引是從0開始到array's length - 1