我的牌组类遇到问题,我有代码创建一个有限的牌组,并将从数组返回一个值,然后将其设置为空。它还首先检查它是否为 null,因为 getCard() 被多次调用。这可以确保没有重复的卡。问题是,当我运行我的代码时,它会打印空行,这一定意味着它返回 null,根据我的理解,这不应该发生。
public class Deck {
public int randomNumber;
private String card;
private String [] deck;
public Deck()
{
deck = new String [] {"Ace Of Hearts" , "2 Of Hearts" , "3 Of Hearts" , "4 Of Hearts" , "5 Of Hearts" , "6 Of Hearts" , "7 Of Hearts" ,
"8 Of Hearts" , "9 Of Hearts" , "10 Of Hearts" , "Jack Of Hearts" , "Queen Of Hearts" , "King Of Hearts" ,
"Ace Of Diamonds" , "2 Of Diamonds" , "3 Of Diamonds" , "4 Of Diamonds" , "5 Of Diamonds" , "6 Of Diamonds" ,
"7 Of Diamonds" , "8 Of Diamonds" , "9 Of Diamonds" , "10 Of Diamonds" , "Jack Of Diamonds" , "Queen Of Diamonds" ,
"King Of Diamonds" , "Ace Of Clovers" , "2 Of Clovers" , "3 Of Clovers" , "4 Of Clovers" , "5 Of Clovers" ,
"6 Of Clovers" , "7 Of Clovers" , "8 Of Clovers" , "9 Of Clovers" , "10 Of Clovers" , "Jack Of Clovers" ,
"Queen Of Clovers" , "King Of Clovers" , "Ace Of Spades" , "2 Of Spades" , "3 Of Spades" , "4 Of Spades" , "5 Of Spades" ,
"6 Of Spades" , "7 Of Spades" , "8 Of Spades" , "9 Of Spades" , "10 Of Spades" , "Jack Of Spades" ,
"Queen Of Spades" , "King Of Spades"};
}
public String getCard ()
{
randomNumber = (int) (Math.random() * 51) + 1;
String tempCard;
if (deck[randomNumber] != null)
{
tempCard = deck[randomNumber];
deck[randomNumber] = ("");
return (tempCard);
}
else
{
while (deck[randomNumber] == null)
{
randomNumber = (int) (Math.random() * 51) + 1;
}
tempCard = deck[randomNumber];
deck [randomNumber] = ("");
return (tempCard);
}
}
}
这是一个运行我的套牌类的测试程序:
import hsa.Console;
public class DeckTest {
static Console c;
public static void main(String[] args) {
//The Console
c = new Console();
Deck Card = new Deck();
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
c.println(Card.getCard());
}
}
最佳答案
这个测试是徒劳的:
deck[randomNumber] != null
因为您的所有牌组元素都不为空,并且您将用“”替换抽出的牌,“”是空字符串,但不为空。
使用
deck [randomNumber] = null;
循环也应该得到改进。
private Random rand = new Random();
public String getCard () {
String tempCard = null;
do {
int r = rand.nextInt( deck.length );
tempCard = deck[r];
deck[r] = null;
} while( tempCard == null );
return tempCard;
}
应该添加一个测试,以免尝试绘制比牌组中更多的内容。
关于Java - 创建卡片组类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889641/