gpt4 book ai didi

java - 双数组/唯一随机数(卡片组)

转载 作者:行者123 更新时间:2023-12-02 07:24:35 25 4
gpt4 key购买 nike

我正在创建一个程序,该程序具有一副纸牌的双数组列表。这副牌将发出两“手牌”。必须将 5 张独特的牌发给“comHand”,这是一个存储 5 张牌的双数组。第一个 [] 存储正在发牌的迭代(第一张牌、第二张牌等),第二个 [] 将牌的花色存储在 [0] 中,将牌的数量存储在 [1] 中。

我简化了代码,以确保获得 3 次独特的抽奖。只有一种花色和 3 个可能的号码可供选择。我的代码在///上方运行良好(这两个数字始终是唯一的)。然而,下面的代码有时不会产生唯一的数字。我可以获得一些帮助来了解这是为什么吗?

        int comHand [][] = new int [5][2];
card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);

comHand[0][0] = card1;
comHand[0][1] = card2;

card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);

while (card1 == comHand[0][0] && card2 == comHand[0][1]){
card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);}

comHand[1][0] = card1;
comHand[1][1] = card2;

///

card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);

while (card1 == comHand[0][0] && card2 == comHand[0][1]){
card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);}
while (card1 == comHand[1][0] && card2 == comHand[1][1]){
card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);}

comHand[2][0] = card1;
comHand[2][1] = card2;

最佳答案

你的 while 循环似乎有一个错误的条件。尝试||而不是&&:

 while (card1 == comHand[0][0] || card2 == comHand[0][1]) {
card1 = (int) (Math.random()*1);
card2 = (int) (Math.random()*3);
}

我会尝试另一种方法,因为“重复 Math.random() 直到一切正常”不是一个好的算法。很难预测算法需要完成多少步(以及是否总是会完成)。

使用卡片对象而不是 int 数组。使用 Math.random(或 Random)从集合中选择卡片,然后从该集合中删除选定的卡片。这样就不会再被选中。或者构建一副牌,将其洗牌,然后从牌堆中弹出最上面的牌,直到完成。这非常容易实现。

关于java - 双数组/唯一随机数(卡片组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com