簡體   English   中英

我有一個包含ArrayList的ArrayList <Integer> 。 我無法從ArrayList中刪除元素 <Integer>

[英]I have an ArrayList that contains an ArrayList<Integer>. I am having trouble removing elements from the ArrayList<Integer>

“ gamePiles” ArrayList存儲“硬幣” ArrayList。 我正在編寫一種方法,用於刪除gamePiles ArrayList的選定索引的給定數量的硬幣。 但是,以下方法導致從所有gamePile元素中刪除硬幣。

public class game(){
private  ArrayList<Integer> Coins = new ArrayList<Integer>();
private  ArrayList<ArrayList<Integer>> gamePiles = new ArrayList<ArrayList<Integer>>();

我用下面的makePiles()方法初始化

public void makePiles(){
    for(int i=0; i<arbitrary; i++){
        Coins.add(i);
    }
    System.out.println("initial amount of coins " + Coins.size());
    for(int z = 0; z < arbitraryPiles; z++){
        gamePiles.add(Coins);
    }
    System.out.println("this many piles " + gamePiles.size());
}

displayPiles()方法在屏幕上顯示堆積和硬幣

public void displayPiles(){
    for(int i=0; i < gamePiles.size(); i++){
        int z = i+1;
        System.out.print("Pile " + z + ": ");
        for(int y =0; y < gamePiles.get(i).size(); y++){
            //System.out.print(y + 1);
            System.out.print("  "+gamePiles.get(i).get(y));
        }
        System.out.println();
    }       
}

下面是調用該方法的行

game.removeCoinsFromPile(int pile, int coins)

下面的for循環不會簡單地從所選堆中刪除“最后一個”元素。 它從gamePiles ArrayList中的所有堆中刪除最后一個元素。 我希望它僅從選定的堆中移除硬幣。

public void removeCoinsFromPile(int pile, int coins) {
    int last = gamePiles.get(pile).size() - 1;
    for(int i = coins; i > 0; i--) {        
        gamePiles.get(pile).remove(last);
        last--;
    }
}

您在gamePiles中的所有元素都指向同一列表。 當您更改其中之一時,它們都將更改,因為它們是指完全相同的列表。

嘗試替換此:

for(int z = 0; z < arbitraryPiles; z++){
    gamePiles.add(Coins);
}

有了這個:

for(int z = 0; z < arbitraryPiles; z++){
  gamePiles.add(new ArrayList<>(Coins));
}

這將為gamePiles每個元素創建Coins列表的新副本。

您要在堆列表中添加同一堆硬幣。 您應該為每個列表創建新的堆,如下所示:

    for(int z = 0; z < arbitraryPiles; z++){
     for(int i=0; i<arbitrary; i++){
            coins.add(i);
        }
        System.out.println("initial amount of coins " + coins.size());

        gamePiles.add(coins);
    }

System.out.println("this many piles " + gamePiles.size());

當然,如果您不想生成相同大小的列表,則應該為內部循環的每次迭代設置arbitrary變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM