2014-12-02 109 views
0

除了在我洗牌後試圖顯示牌組以外,一切都在這裏工作。我不確定爲什麼,但陣列列表似乎在洗牌後是空的。如果我將混排代碼註釋掉,甲板顯然會顯示,但不會顯示。由於這是一項任務,我需要我的程序保持相同的通用格式,而混洗算法需要儘可能保持相同。使用不顯示列表列表的牌洗牌的輸出

public class Shuffler 
{ 
    public static void selectionShuffle(ArrayList<Card> values) { 
    ArrayList<Card> shuffled = new ArrayList<Card>(); 
    ArrayList<Card> copy = new ArrayList<Card>(); 
    for (int k = 51; k >= 0;) { 
     int r = (int)(Math.random() * (double)52); 
     if (r < values.size()) { 
      shuffled.add(values.get(r)); 
      values.remove(r); 
      k--; 
     } 
    } 
    for (int i = 0; i < values.size(); i++) { 
     values.set(i, shuffled.get(i)); 
    } 


} 

這裏是甲板構造函數,它創建一個甲板出三個陣列以形成三個卡對象。

public class Deck 
{ 
    public static ArrayList<Card> cards = new ArrayList<Card>(); 
    private int size; 
    public Deck(String[] ranks, String[] suits, int[] values) 
    { 
     for (int i = 0; i < values.length; i++) { 
      cards.add(new Card(ranks[i], suits[i], values[i])); 
     } 
     size = values.length; 
     shuffle(); 
    } 

    public void shuffle() { 
     Shuffler.selectionShuffle(cards); 
     size = size(); 
    } 
} 
+0

什麼是「複製」變量? – aioobe 2014-12-02 14:47:57

+0

垃圾。昨天晚上我正在測試,並在今天早上突然冒出來之前忘記清除垃圾。 – LordValkyrie 2014-12-02 14:55:48

+0

考慮爲隨機索引生成器使用Random.nextInt()。 – user1717259 2014-12-02 14:58:07

回答

2

這應該是:

for (int i = 0; i < shuffled.size(); i++) { 
    values.add(shuffled.get(i)); 
} 

問題是你有:

for (int i = 0; i < values.size(); i++) { 
    values.set(i, shuffled.get(i)); 
} 

值此時的大小爲0,所以它不會做任何事情......你從值中移除所有元素,因此它的大小爲0.

+0

...多麼愚蠢的錯誤。你是對的。我還必須將values.set(我,shuffled.get(i))更改爲value.add(shuffled.get(i))。謝謝一堆。 – LordValkyrie 2014-12-02 14:54:28

+0

歡迎您的光臨,我可以幫助您將此標記爲正確且滿意?謝謝! – brso05 2014-12-02 14:54:57

0

Java通過引用傳遞對象,這意味着如果您的函數是manilupating chang編輯對象,函數調用後也會被修改。

在這裏,您撥打selectionShuffle

public void shuffle() { 
    Shuffler.selectionShuffle(cards); 
    size = size(); 
} 

而且selectionShuffle功能操縱傳遞的列表中cards。由於您致電values.remove(r);,因此當功能完成時,您的列表爲空。

一個簡單的解決方案是創建通過values的副本並操作副本。 ArrayList有一個constructor來做到這一點。