gpt4 book ai didi

java - 在java中为一副纸牌创建一个丢弃堆

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:54 25 4
gpt4 key购买 nike

所以我的代码只有一个问题,那就是检查同一张卡,因为我不希望这些卡重复。没有重新洗牌或其他任何事情,只是随机发牌,直到没有剩下的为止。我不知道该怎么做。我很感激一些帮助;无论是 theanswe 还是只是一点点插入。

package Card;

import java.util.Random;

public class deckOfCards {
public String[] suite = { "Hearts", "Spade", "Diamonds", "Clubs" };
public String[] faceValue = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
public int deckCount = 0;
private Card[] deck = new Card[52];
public int index;

public void buildDeck() {
for (int i = 0; i < suite.length; i++) {
for (int j = 0; j < faceValue.length; j++) {
deck[deckCount] = new Card(suite[i], faceValue[j]);
deckCount++;
}
}
}
public Card shuffle(){
Random rand = new Random();
int index = rand.nextInt(52);
return deck[index];
}

}

这会创建卡片并随机化它们封装卡;

public class Card {

private String suite;
private String faceValue;

public Card(){

}

public Card(String suite, String faceValue){
this.setSuite(suite);
this.setFaceValue(faceValue);
}
public String getSuite(){
return suite;
}


//array list
//
public void setSuite(String suite){
this.suite = suite;
}

public String getFaceValue(){
return faceValue;
}

public void setFaceValue(String faceValue){
this.faceValue = faceValue;
}
}

package Card;

public class Driver {



public deckOfCards cards = new deckOfCards();
private Card [] discard = new Card[52];

public static void main(String[] args) {
Driver driver = new Driver();
driver.DealCards();

}

public void DealCards(){
int cardsLeft = 52;
cards.buildDeck();
Card randomCard = new Card();
for (int i = 0; i < 5; i++) {
cardsLeft--;
randomCard = cards.shuffle();

System.out.println(randomCard.getFaceValue() + " of " + randomCard.getSuite());

}
System.out.println("Cards left:" + cardsLeft);
}
}

这会发牌。再次感谢任何帮助。

最佳答案

我认为缺少的是一种从牌组中移除牌的方法。

每当发出一张牌时,就需要将其移除,并对剩余的牌组而不是每次都对所有 52 张牌进行新的随机抽取。这称为无替换平局。当前代码执行替换绘制

实现此目的的最快方法是仅修改 deckOfCards 类:

  • 使用 vector 或卡片而不是数组。这允许插入和删除。在数组中,大小无法更改:每次都必须创建一个新数组,效率非常低。
  • 在洗牌函数中,您不仅需要返回一张随机牌,还需要将其从 vector 中删除。
  • 在洗牌功能中,随着牌组的缩小调整 52。

关于java - 在java中为一副纸牌创建一个丢弃堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623640/

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