Java - 创建卡片组类

标签 java

我的牌组类遇到问题,我有代码创建一个有限的牌组,并将从数组返回一个值,然后将其设置为空。它还首先检查它是否为 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/

相关文章:

java - JOptionPane 输出文本副本

java - 是否可以使用普通 Java 使用 okHttp 客户端执行 OAuth2 请求

java - 如何从输入文件一次读取两行并将它们添加到对象中?

java - 与 Apache commons math 绑定(bind)的小型 Java 开源数学表达式计算器

java - 如何在android中读取带有土耳其字符的文本文件?

java - 发送到 ServerHandler 外部时,客户端未收到服务器发送的消息

java - 什么时候应该开始使用字符串替换而不是 sprintf?

java - Java 程序中的字符串大小是否有限制?

java - 使用 Objectify4 持久化 map

java - 通过添加 Enum 静态 Holder 进行优化