0

arraylist の最初の要素を残りの要素と比較しようとしています。

次に、arraylist の 2 番目の要素を残りの要素と比較し、arraylist
の最後まで比較します。

コードは次のとおりです。

ArrayList<String> a = new ArrayList<String>();

    a.add("G1");
    a.add("G2");
    a.add("G3");
    a.add("G1");

    System.out.println(a.size());

    for(int i = 0; i<a.size(); i++){

        for(int j = 0; j<a.size(); j++){

        if(a.get(i) == a.get(j))
            System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);

        }





    }
4

4 に答える 4

1

==参照の等価性です (たとえば、これら 2 つのオブジェクトはメモリ内の同じ場所を指していますか)。オブジェクトの等価性については、.equals()代わりに使用してください。

于 2013-01-11T05:27:17.533 に答える
1

あなたのコードではなく、このコードを使用してください。

for(int i = 0; i<a.size()-1; i++){

    for(int j = i+1; j<a.size(); j++){

    if(a.get(i).equals(a.get(j)))
        System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);

    }

それが役立つことを願っています.. :)

于 2013-01-11T05:44:54.617 に答える
0

あなたの場合、参照等価である == を使用する代わりに Strings を使用しているため、メモリアドレスが同じで.equals()あるため、2 つの文字列を実際の値で比較する which を使用する必要があります。

forループに関しては、これを行うことで少し効率を上げることができます。

for (int i = 0; i < a.size()-1; i++)
{
    for (int j = i+1; j < a.size(); j++)
    {
        if(a.get(i).equals(a.get(j)))
        {
            System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);
        }

    }
}

すでにa[i]とa[j]を比較している場合があるので、a[j]=a[i]にしても結果は同じなので読み飛ばしてください。これにより、j と i が同じ場合に a[i] が a[j] と等しいかどうかをチェックする手間も省けます。

于 2013-01-11T05:51:14.427 に答える
0

使用する

 if((a.get(i)).equals(a.get(j)))

それ以外の

 if(a.get(i) == a.get(j))

Morover の初期化を開始します。j = i+1これらの前の文字列は既にチェック済みなので、再度開始する必要はありません。

編集

i<a.size()-1最後の要素をそれ自体でチェックしないように、外側のループを制限する必要があります。

これが役立つことを願っています。さらにヘルプが必要な場合は、お尋ねください。

于 2013-01-11T05:30:21.947 に答える