-1

整数配列リストの配列リストと名前の配列リストがあります。特定の名前に対応する整数配列リストの 1 つに特定の数を追加し、他のすべての配列リストに 0 を追加したいと思います。私が持っているものはうまくいくはずだと思いますが、すべてに0を追加するだけで、名前が正しい場合は特別なケースを無視します。「評価」は整数、「ユーザー」は文字列です。「Names」は文字列の配列リストです。言語はJavaです。

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

                if (names.get(i)==user)

                    allratings.get(i).add(rating);

                if (names.get(i)!=user) 

                    allratings.get(i).add(0);
            }   

構文に何か問題がありますか? 印刷行を挿入すると、自分の名前 arraylist と allratings arraylist が完全に一致していることがわかります。どこが間違っていますか?

4

5 に答える 5

8

ユーザーは文字列であり、Javaでは==文字列のテキストコンテンツではなく参照(または必要に応じてポインタ)を比較するため、文字列の比較には使用できません。使用する:

if (names.get(i).equals(user))
于 2012-04-22T19:11:52.883 に答える
5

.equals()Javaで文字列を比較するときに使用します。

if (user.equals(names.get(i)))

Javaの文字列を==と比較すると、参照が比較されますが、これは希望どおりではない可能性があります。同じ文字列を保持しているにもかかわらず、参照が異なるようです。これが、条件が常にfalseを返す理由です。文字列の実際の値を比較したいとします。これはで行われ.equals()ます。

于 2012-04-22T19:11:22.130 に答える
2

==参照を比較することに注意してください。多くの場合、Java によって維持される文字列リテラル プールが原因で、参照を比較すると、 が返されることがありtrueます。String s = "test"aと別のを作成するとString s2 = "test"、文字列プール (これは Java の最適化です) のために両方が同じ参照を指し、したがって を返しtrueます。ただし、これは行わないでください。安全に使用してください.equals()

于 2012-04-22T19:20:43.423 に答える
1

このような文字列の比較は Java では機能しません。メモリ内の異なる場所を指しているからです。これを修正するには、intern()最初にそれらを試すか (メモリ内の同じデータを指すようにします)、次のequals()ような方法を使用します。

string1.equals(string2);
于 2012-04-22T19:14:18.990 に答える
0

等価性テストが失敗しているように見えます (これが、反復ごとに != が成功している理由です)。「names.get(i)」と「user」の値が同じように見える場合は、おそらくタイプが異なっています。これらの値の 1 つに別の型への CAST が必要ですか?

于 2012-04-22T19:06:25.847 に答える