gpt4 book ai didi

java - 用 Java 为 OOP 的二十一点克隆制作一副纸牌,当填充这副纸牌时,它会损坏,我不明白为什么

转载 作者:行者123 更新时间:2023-12-01 19:33:15 25 4
gpt4 key购买 nike

用 Java 为 OOP 的二十一点克隆制作一副纸牌,当填充这副纸牌时,它会损坏,我不明白为什么。游戏没有套装。我试图让它正确地填充牌组,但它总是卡在牌组中的 48 张牌上。无法弄清楚为什么,所以任何帮助将不胜感激

import java.util.ArrayList;
import java.util.Random;

public class Deck {

ArrayList<Integer> deckList = new ArrayList<Integer>();
Deck(){
newDeck();
}

public boolean duplicateNum(int CardType){
int counter = 0;

if (deckList.size() < 4){
return false;
}

for (int x = 0; x < deckList.size(); x++){
if (deckList.get(x) == CardType){
counter++;
}
}
if (counter >= 4){
return true;
}
return false;
}

public void newDeck(){



for (int x = 1; x <= 52; x++){
addCard();
}
}

public void addCard(){
Random deckFiller = new Random();
boolean x = true;
while (x){
int cardAdder = deckFiller.nextInt(12) + 1;
if (!duplicateNum(cardAdder)){
deckList.add(cardAdder);
} else {
continue;
}
System.out.print(deckList.size() + "-");
System.out.println(cardAdder);

}
}

}

最佳答案

您的 addCard() 方法存在几个问题:

  • while(){} 循环永远不会结束,因为 x 从未设置为 false 并且没有 break > 其中的子句
  • nextInt(intbound) 返回一个从该随机数生成器的序列中提取的、在 0(含)和指定值(不包括)之间均匀分布的伪随机 int 值。,因此您必须设置绑定(bind)到 13 而不是 12

这是固定方法:

public void addCard() {
Random deckFiller = new Random();
while (true) {
int cardAdder = deckFiller.nextInt(13) + 1;
if (!duplicateNum(cardAdder)) {
deckList.add(cardAdder);
System.out.print(deckList.size() + "-");
System.out.println(cardAdder);
break;
}
}
}

如果你想改进牌组的初始化,你可以将所有 52 张牌添加到其中并用 Collections.shuffle() 洗牌。方法:

public void newDeck() {
for (int i = 1; i <= 13 ; i++) {
for (int j = 0; j < 4; j++) {
deckList.add(i);
}
}

Collections.shuffle(deckList);

// for (int i = 0; i < deckList.size(); i++) {
// System.out.println(i+1 + "-" + deckList.get(i));
// }
}

关于java - 用 Java 为 OOP 的二十一点克隆制作一副纸牌,当填充这副纸牌时,它会损坏,我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869923/

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