2014-11-20 5 views
0

Я хочу сравнить два String s в двух разных массивах. String s хранятся в s1 и s2 переменных. Эта часть отлично работает, но если я добавлю, если условие, if(s1.equals(s2)){/*...*/}, я получаю ArrayIndexOutOfBoundsException.Java equals вызывает ArrayIndexOutOfBoundsException

Посмотрите на этих двух снимков экрана:

В обоих случаях массивы имеют одинаковые значения. Единственное, что было изменено, это условие if.

Изображение # 1 enter image description here

Изображение # 2 enter image description here

Код:

 Vagon tmp = first; 
     int stevec = 1; 
     while(tmp != null){ 
      double trenutenVolumen = 0; 
      for(int j = 0; j < tmp.opisTovora.length; j++){ 
       trenutenVolumen += tmp.volumenTovora[j]; 
      } 
      double lahkoDodamVolumna = tmp.volumen-trenutenVolumen; 
      double lahkoDodamTeze = lokomotiva.najvecjaMasa-trenutnaTeza; 

      System.out.println("len: "+tmp.opisTovora.length); 
      if(tmp.tipTovora == tipTovora[0] && lahkoDodamVolumna >= volumenTovora[0] && trenutnaTeza+tezaTovora <= lokomotiva.najvecjaMasa){ 
       if(!tmp.tipTovora){ 
        String s1 = tmp.opisTovora[0]; 
        String s2 = opisTovora[0]; 
        //if(s1.equals(s2)){ 
         System.out.println(s1 + " == " + s2); 
         System.out.println("LAHKO DODAM TOVOR #" + (i+1) + " => V VAGON #" + stevec); 
         break; 
        //} 
       } 
       if(tmp.tipTovora){ 
        System.out.println("LAHKO DODAM TOVOR #" + (i+1) + " => V VAGON #" + stevec); 
        break; 
       } 
      } 

      stevec++; 
      tmp = tmp.next; 
     } 
+0

Exception показывает номер строки 498. Посмотрите на это. –

+0

Является ли этот код многократно. Поскольку ваш первый снимок показывает его несколько раз печатных значений. –

+0

@Naman Gala Ну, почему линия 498 хороша в первом случае? –

ответ

1

Ваше исключение на этой линии - String s1 = tmp.opisTovora[0]. Это означает, что tmp.opisTovora - пустой массив, поэтому tmp.opisTovora[0] выходит за пределы этого массива.

Это не имеет никакого отношения к equals.

+0

Но это не может быть, это тот же массив в обоих случаях –

+0

@TheDubleM Вы не указали, где вы инициализируете 'tmp.opisTovora'. Вы должны попытаться напечатать 'tmp.opisTovora.length' перед строкой, в которой происходит исключение. – Eran

+2

Без if-state из первого цикла выходит из цикла. В первый раз, похоже, заполнен «tmp.opisTovora». С помощью if-statement, пропущенного, кажется, что 'tmp.opisTovora' опустошена, и на следующем шаге происходит ошибка. –

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