2014-12-02 89 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来做到这一点。