2016-06-15 3 views
-2

私はすでに配列に入れたArrayListからIntegerを削除します。配列にarraylistを入れてforループ内で取り除いてください

何私が今持っていることは次のとおりです。

int[] playersArray = null; 

ArrayList<Integer> spelers = new ArrayList<Integer>(); 

uはここの下に表示さtable.lengthがあるテーブルの量である、テーブル[J] .LENGTHが各テーブルを取得することができますプレイヤーの量です。それはうまくいくが、PlayerListから間違ったIntegerを取り除くと、playersArrayに入れられたものではなく次のものが取り除かれる。あなたのループで

for(int j = 0; j < table.length; j++){ 
    playersArray = new int[table[j].length]; 
    for(int i = 0; i < table[j].length; i++){ 
     playersArray[i] = playersList.get(i); 
     playersList.remove(i); 
    } 
    table[j] = playersArray; 
    System.out.println("tafel: " + (j+1) + " " + Arrays.toString(tafel[j])); 
} 
+0

あなたは 'ArrayList#remove'の内容とリストの内容がどのように動作するのかを試そうとしましたか?ちょうど[ここ](http://stackoverflow.com/questions/718554/how-to-convert-an-arraylist-containing-integers-to-primitive-int-array)のメソッドの1つを使用し、 'playersList'をクリアしてくださいそれ以降は... – Tom

+0

'table'の宣言も表示します。 –

答えて

1

ルック:あなたはplayersListからアイテム0を削除

for(int i = 0; i < table[j].length; i++){ 
    playersArray[i] = playersList.get(i); 
    playersList.remove(i); 
} 

i == 0で。これにより、後続のすべての要素が1つ下に移動し、項目1は0に、項目2は1に、というように続きます。次に、iを1に増やします。get(i)は、アイテム1を生成しますが、新しいアイテム1です。古いアイテム1がアイテム0に移動されました。この時点で古いアイテム2を取得しています。

これは、コレクションを反復しながら構造的にコレクションを変更しない理由の例です。 ArrayList.removeのドキュメントから

1

は、このリスト内の指定された位置にある要素を削除します。 後続の要素を左にシフトします(インデックスから1を引きます)。

あなたplayersListplayersList.remove(0)後、この

playersList[0] = 1 
playersList[1] = 2 
playersList[2] = 3 
playersList[3] = 4 

のようなものであるのであれば、リストには

playersList[0] = 2 
playersList[1] = 3 
playersList[2] = 4 

ので、次の操作(playersList.remove(1))が正しい要素上で実行されることはありませんになります。

すべての要素をループするだけであれば、playersList.remove(i)playersList.remove(0)に置き換えることができます。playersList.get(i)も同様です。

0

他の人が説明したように、各要素を削除するとリストが折りたたまれ、要素のスキップが繰り返されます。ここではいくつかの選択肢されています

1)は、最初の要素を引き出してください:

​​

2)Iterator.remove()を使用して反復しながら、削除します。

Iterator<Integer> playersIter = playersList.iterator(); 
for(int j = 0; j < table.length; j++){ 
    ... 
    for(int i = 0; i < table[j].length; i++){ 
     playersArray[i] = playersIter.next(); 
     playersIter.remove(); 
    } 
    ... 
} 

3)あなたが期待したり、ドンしていない場合残りの要素が必要な場合は、各要素をインデックスで取得し、完了したらリストをクリアすることができます:

​​

これらのソリューションはすべて、playersListtableを満たすのに十分な要素を持っていると想定しています。

関連する問題