-2

ほとんど同じデータを持つ2つの文字列配列がありますが、長さが異なるため、値を1つずつ比較したいと思います。これは私のコードですが、ご覧のとおり効率的ではありません。

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]);
}

私はその問題を解決することができます。

4

3 に答える 3

1

2 つのリストを見ると、「camboya」、「retrato」、および「ovalado」は、1 つずつ検索すると言うので、ある時点で同じように表示されることを期待していると思います。

その場合は、最初の for ループにネストされた 2 番目の for ループを使用して、すべての要素を相互に比較する必要があります。

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]);
    }
}
于 2013-09-05T18:32:23.450 に答える
0

k番目の位置の要素ごとに要素を比較したいですか、それとも1つの要素を他の要素と比較したいですか? 他のソースコードに対して1つの場合:

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()メソッドは異なる長さでも機能します。

于 2013-09-05T18:32:12.993 に答える
0

誰かが言ったように、arrayDatosより長いですarrayIndentArrayIndexOutOfBoundsこれにより、例外がスローされます。メソッドは完全に効率的ですが、代わりにループを次のように記述したい場合があります。

for (int k=0; k<Math.min(Constantes.arrayDatos.length, Constantes.arrayIndent.length); k++)
于 2013-09-05T18:21:43.180 に答える