2015-06-02 3 views
0

В настоящее время работает над проектом студента. Я хочу определить наибольшее число и отсортировать его по форме пузыря, число анализируется из JLabel, но я получаю эту ошибку каждый раз. Вот фрагмент кода:Java ArrayIndexOutOfBounds

JLabel[] wuerfelsummen = new JLabel[7]; 
    wuerfelsummen[0] = player1_wuerfelsumme; 
    wuerfelsummen[1] = player2_wuerfelsumme; 
    wuerfelsummen[2] = player3_wuerfelsumme; 
    wuerfelsummen[3] = player4_wuerfelsumme; 
    wuerfelsummen[4] = player5_wuerfelsumme; 
    wuerfelsummen[5] = player6_wuerfelsumme; 

public int ermittleGewinner(JLabel[] w) 
{ 
    int temp; 
    int[] zahlen = new int[w.length]; 
    for(int i=0; i<=zahlen.length; i++) 
    { 
     if(w[i].getText() == null) 
     { 
      zahlen[i] = 99999999; 
     } 
     else 
     { 
      zahlen[i] = Integer.parseInt(w[i].getText()); 
     } 
    } 

    for(int i=1; i<zahlen.length; i++) 
    { 
     for(int j=0; j<zahlen.length-i; j++) 
     { 
      if(zahlen[j]>zahlen[j+1]) 
      { 
       temp=zahlen[j]; 
       zahlen[j]=zahlen[j+1]; 
       zahlen[j+1]=temp; 
      } 

     } 
    } 

ответ

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

Это неверно, так как массивы 0 индексированные, то есть они достигают от 0 до длины-1.

Изменить его

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

Интересно, что другие ваши петли избежать этой ошибки, хотя вы все равно должны быть осторожными о j+1 позже. Убедитесь, что это никогда не будет> = zahlen.length.

Можно просто инициализировать j с 1 вместо 0, а затем заменить все вхождения j с j-1 и j+1 с j

+0

Я все еще получаю ту же ошибку:/ –

+0

Как указывал @GriffeyDog, вам нужно быть осторожным относительно 'j + 1' в другом цикле. Вы должны убедиться, что он никогда не будет> = zahlen.length – Dragondraikk

0

изменения «я < = zahlen.length» в вашей цикл для «я < ZAHLEN. длина».

запомнить массивы 0 индексируется так что вы пытаетесь получить доступ к одному индексу элемента за пределами того, как велик ваш массив с помощью метода «< =» Вы используете

Второй цикл должен начинаться я = 0 вместо i = 1. Используя i = 1, вы снова попытаетесь получить доступ к одному элементу за размер вашего массива

0

ArrayIndexOutOfBounds expcetion появляется, когда код пытается получить доступ к элементу массива, которого нет. В вашем коде, поскольку вы за цикл за одно дополнительное время for(int i=0; i<=zahlen.length; i++), вы получаете это исключение. Продолжайте цикл, как for(int i=0; i<zahlen.length; i++)

Вы не просто проверить zahlen[i], но и для w[i], потому что вы зацикливание на длине zahlen и может случиться так, что w имеет меньшую длину, то zahlen.

Смежные вопросы