1

私はAndroid用のアプリを書いています。文字列配列を使用して、共有設定からすべてのプレイヤー名を取得します (文字列配列である必要があります)。共有設定からすべてのアクティブなプレーヤーをプルするリストがあります (リストである必要があります)。リストをチェックして、プレーヤーの配列にないプレーヤーが含まれているかどうかを確認し、それらを削除する必要があります。ロジックを理解できないようです。

例えば:

リストには以下が含まれます: b c a e

配列の内容: a b c d

「e」はリストには存在するが配列には存在しないため、「e」をリストから削除する必要があります。コマンド (.contains()、.remove()、for()) は知っていますが、ロジックがわかりません。

私の最初の試みは:

for(int x=0;x<numOfPlayers;x++){
        players[x] = getPrefs.getString("player"+Integer.toString(x), " ");
        if(activePlayers.size()>0)
            if(activePlayers.contains(players[x]))
                playersChecked[x] = true;
        else{
            if(x<activePlayers.size())
                activePlayers.remove(x);
        }
    }

しかし、これは、player[x] が activePlayers にない項目を持っている場合、activePlayers から x を削除します。これは問題ありません。それは逆である必要があります。

4

2 に答える 2

11

あなたが探しているのはですCollection.retainAll

指定されたコレクションに含まれているこのコレクションの要素のみを保持します

list.retainAll(Arrays.asList(array));
于 2012-08-18T19:22:26.963 に答える
1

あなたの人生を困難にする重要なポイントの 1 つは、あなたの方法が望ましくない結果をもたらすことです。プレーヤーを削除すると、リスト内の要素が変更されるため、プレーヤーをスキップすることになります。

たとえば、リストでは次のようになります。

{ A、B、C }

Bを削除すると、次のようになります。

{ 交流 }

x がインクリメントすると、x = 3 になり、以前は C を指していましたが、現在は何も指していません。

代わりに、反復子の使用を検討してください。参照: Java のイテレータ

これにより、インデックスを台無しにすることなく要素を削除できます。

あなたの質問に答えるために、activePlayers に対してイテレータを作成します。繰り返しながら、イテレータ内の各項目をリストと照合し、見つからない場合は項目を削除します。

于 2012-08-18T19:30:30.460 に答える