2013-09-05 4 views
-2

У меня есть два массива String, которые имеют почти одинаковые данные, но я хочу сравнить значения один за другим, потому что они имеют разную длину. Это мой код, но, как вы видите, он не эффективен.Сравнить Array различной длины?

String arrayIdent[] = {"abanico","camboya","retrato","ovalado"}; 

String arrayDatos[] = {"camboya","retrato","ovalado","granizo","riachuelo"}; 

for(int k = 0; k < Constantes.arrayDatos.length; k++) 
{ 
     if(arrayIdent[k].equals(arrayDatos[k])) 
      System.out.println(arrayIdent[k] + " equal " + arrayDatos[k]); 
     else 
      System.out.println(arrayIdent[k] + " is not equal to " + arrayDatos[k]); 
} 

Я могу помочь с проблемой.

+2

Является эффективным для меня. –

+1

Это 'O (n)', что не так уж плохо. –

+1

Вы получите там исключение ArrayIndexOutOfBounds. Вы итерируете по индексу большего массива и получаете доступ к меньшему массиву по этому индексу. –

ответ

0

Вы хотите сравнить поэлементно на к-й позиции или одного элемента по отношению к другим элементам? Если один против другого, то исходного кода:

String arrayIdent[] = { "abanico", "camboya", "retrato", "ovalado" }; 
String arrayDatos[] = { "camboya", "retrato", "ovalado", "granizo", "riachuelo" }; 

boolean found;  
for (int k = 0; k < arrayIdent.length; k++) 
{ 
    found = false; 
    for (int j = 0; j < arrayDatos.length; j++) 
     if(arrayIdent[k].equals(arrayDatos[j])) 
     { 
     System.out.println(arrayIdent[k] + " is equal to " + arrayDatos[j]); 
     found = true; 
     } 
    if (!found) 
     System.out.println(arrayIdent[k] + " is not equal to any element"); 
} 

Если вы хотите сравнить целые массивы, то equal() метода работает с различной длиной также.

0

Как уже упоминалось, arrayDatos длиннее arrayIndent. Это вызовет исключение ArrayIndexOutOfBounds. Ваш метод вполне эффективен, но вы можете вместо этого написать цикл, как:

for (int k=0; k<Math.min(Constantes.arrayDatos.length, Constantes.arrayIndent.length); k++) 
+0

Woops. Спасибо! – collinjsimpson

1

Посмотрите на два списка, я предполагаю, что вы ожидаете, что «камбоя», «ретро» и «оваладо» будут отображаться как равные в какой-то момент, так как вы скажете поиск один за другим.

Если это так, вам нужно будет использовать второй цикл for-loop, вложенный в первый, чтобы сравнить все элементы с eachother.

for (int i = 0; i < arrayDatos.length; i++){ 
    for (int k = 0; k < arrayIdent.length; k++){ 
     if(arrayIdent[k].equals(arrayDatos[i])) 
      System.out.println(arrayIdent[k] + " equal " + arrayDatos[i]); 
    } 
} 
Смежные вопросы