2016-11-12 6 views
0

Я работаю над проектом, и мне нужно сравнить два элемента одного и того же массиваСравнение двух элементов массива строк с .equals()

private void checkImports() 
{ 
    //import tester 
    for(int i = 0; i<theClass.length;i++) 
    { 
     for(int j = 0; j<i; j++) 
      { 
       if(theClass[i].equals(theClass[j])) 
        { 
          System.out.println("There is a double import at line " +i); 
          addError("Double import at line ",i) 
        } 
      } 
    } 
} 

массив заполняется со следующими строками:

"import java.x;" //0 
"import java.y;" //1 
"import java.z;" //2 
"import java.x;" //3 

по какой-то причине, когда я называю Равные() методом он никогда не имеет значение верно, когда я = 3 и у = 0. Любое объяснение, почему метод addError никогда не вызывается было бы оценен

+0

(1) Проверьте дополнительные места в одной из строк (2) Покажите нам код, который заполняет массив – ajb

+0

@Robert, OP сказал, что это значения массива (я полагаю, строки). Он никогда не говорил, что он назвал некоторые переменные/пакеты вроде этого – BackSlash

+0

Ваш код работает при тестировании: [pastebin link] (http://pastebin.com/w5g8xKvb). Ваша проблема не в другом месте, а не в коде выше, но, возможно, с строками, указанными в «ajb». Время использовать отладчик или выполнять более интенсивную отладку. –

ответ

1

Есть два возможных объяснения (я имею в виду, есть много объяснений, но эти два поддаются для проверки первых, я думаю):

  1. Сравнение с i==3 и j==0 фактически никогда не выполняется (даже если вы думаете это).
  2. Значения theClass[0] и theClass[3] на самом деле не равны (даже если вы думаете, что они есть).

Вы можете легко проверить оба случая, например, с помощью отладчика. Если вам не нравится использовать отладчик, вы также можете вставить несколько операторов System.out.println, чтобы проверить, какие значения имеют переменные i и j, и что theClass[0].equals(theClass[3]) фактически оценивает true.