所以问题是我没有获得任何卡的等级或卡的价值,如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;
}
}
}
答案 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);