如何使用Math.random()在Card对象中随机播放卡片

时间:2015-05-02 23:31:49

标签: java

所以问题是我没有获得任何卡的等级或卡的价值,如2-14号和我的角色' C',' D',' H',' S'好像被洗牌了。

我如何改变包含

的对象
new Card(int, char)

包含字符' C',' D',' H',' S'代表卡适合。

以下代码似乎不像保存任何排名一样。

for (int i = 0; i <= 51; i++)           
cards[i] = new Card((int)Math.random() * 52, 'D');

如果card [14]随机生成整数35,那么洗牌应该如何工作的一个例子,那么card [14]将与卡交换[35]。

public void shuffle()
{
    for (int i = 0; i <= 51; i++)           
        cards[i] = new Card((int)Math.random() * 52, 'D');

    for (int i = 0; i <= 51; i++) {     
        Card temp = cards[i];
        for (int j = 0; j <= 51; j++) {
            cards[i] = cards[j];
            cards[j] = temp;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

我建议你先创建套牌,然后将其洗牌。

// Create deck
Card[] cards = new Card[52];
int i = 0;
for (int v = 2; v <= 14; v++)
    for (char s : "CDHS".toCharArray())
        cards[i++] = new Card(v, s);

// Shuffle
Collections.shuffle(Arrays.asList(cards));

答案 1 :(得分:1)

创建一个包含所有卡片组的列表。

创建一个循环,在零和列表方之间随机显示一些数字,每次你获得一个数字时,只需从列表中删除这个项目并将其放入一些shuffeld列表中。

您也可以使用:

Collections.shuffle(yourList);

答案 2 :(得分:0)

您可以使用ArrayList代替数组,然后使用

List<Card> myCards = new ArrayList<>();
//Add your cards
Collections.shuffle(myCards);

答案 3 :(得分:0)

1.public void shuffle()
2.{
3.for (int i = 0; i <= 51; i++)           
4.    cards[i] = new Card((int)Math.random() * 52, 'D');

5.for (int i = 0; i <= 51; i++) {     
6.    Card temp = cards[i];
7.    for (int j = 0; j <= 51; j++) {
8.        cards[i] = cards[j];
9.        cards[j] = temp;
    }
}
}

在j循环内的第一次迭代中,您将每张卡[0-52]设置为temp。因此,您最终将第一张卡复制到所有这些卡。

此处的最佳解决方案是使用集合中现有的随机播放功能

List<Card> myCards = new ArrayList<>();
//Add your cards
Collections.shuffle(myCards);