java - 输出为空,而其他则不为空

标签 java

我正在参加初学者的 Java 类(class)。我必须创建一张卡片。然后创建一副牌和一些方法,然后进行测试。

我的卡类别如下

import java.util.*;

public class Card
{
   public final static int ACE   = 1;
   public final static int TWO   = 2;
   public final static int THREE = 3;
   public final static int FOUR  = 4;
   public final static int FIVE  = 5;
   public final static int SIX   = 6;
   public final static int SEVEN = 7;
   public final static int EIGHT = 8;
   public final static int NINE  = 9;
   public final static int TEN   = 10;
   public final static int JACK  = 11;
   public final static int QUEEN = 12;
   public final static int KING  = 13;

   public final static int CLUBS    = 1;
   public final static int DIAMONDS = 2;
   public final static int HEARTS   = 3;
   public final static int SPADES   = 4;

   private final static int NUM_FACES = 13;
   private final static int NUM_SUITS = 4;

   private int face, suit;
   private String faceName, suitName;

   private int myInt1, myInt2;

   Random rand = new Random();

   //-----------------------------------------------------------------
   //  Creates a random card.
   //-----------------------------------------------------------------
   public Card ()
   {
      face = rand.nextInt(4) + 1;
      setFaceName();

      suit = rand.nextInt(13) + 1;
      setSuitName();
   }



   //-----------------------------------------------------------------
   //  Sets the string representation of the face using its stored
   //  numeric value.
   //-----------------------------------------------------------------
   private void setFaceName()
   {
      switch (face)
      {
         case 1:
            faceName = "Ace";
            break;
         case 2:
            faceName = "Two";
            break;
         case 3:
            faceName = "Three";
            break;
         case 4:
            faceName = "Four";
            break;
         case 5:
            faceName = "Five";
            break;
         case 6:
            faceName = "Six";
            break;
         case 7:
            faceName = "Seven";
            break;
         case 8:
            faceName = "Eight";
            break;
         case 9:
            faceName = "Nine";
            break;
         case 10:
            faceName = "Ten";
            break;
         case 11:
            faceName = "Jack";
            break;
         case 12:
            faceName = "Queen";
            break;
         case 13:
            faceName = "King";
            break;
      }
   }

   //-----------------------------------------------------------------
   //  Sets the string representation of the suit using its stored
   //  numeric value.
   //-----------------------------------------------------------------
   private void setSuitName()
   {
      switch (suit)
      {
         case 1:
            suitName = "Clubs";
            break;
         case 2:
            suitName = "Diamonds";
            break;
         case 3:
            suitName = "Hearts";
            break;
         case 4:
            suitName = "Spades";
            break;
      }
   }

   //-----------------------------------------------------------------
   //  Determines if this card is higher than the passed card. The
   //  second parameter determines if aces should be considered high
   //  (beats a King) or low (lowest of all faces).  Uses the suit
   //  if both cards have the same face.
   //-----------------------------------------------------------------
   public boolean isHigherThan (Card card2, boolean aceHigh)
   {
      boolean result = false;

      if (face == card2.getFace())
      {
         if (suit > card2.getSuit())
            result = true;
      }
      else
      {
         if (aceHigh && face == ACE)
            result = true;
         else
            if (face > card2.getFace())
               result = true;
      }

      return result;
   }

   //-----------------------------------------------------------------
   //  Determines if this card is higher than the passed card,
   //  assuming that aces should be considered high.
   //-----------------------------------------------------------------
   public boolean isHigherThan (Card card2)
   {
      return isHigherThan (card2, true);
   }

   //-----------------------------------------------------------------
   //  Returns the face (numeric value) of this card.
   //-----------------------------------------------------------------
   public int getFace ()
   {
      return face;
   }

   //-----------------------------------------------------------------
   //  Returns the suit (numeric value) of this card.
   //-----------------------------------------------------------------
   public int getSuit ()
   {
      return suit;
   }

   //-----------------------------------------------------------------
   //  Returns the face (string value) of this card.
   //-----------------------------------------------------------------
   public String getFaceName ()
   {
      return faceName;
   }

   //-----------------------------------------------------------------
   //  Returns the suit (string value) of this card.
   //-----------------------------------------------------------------
   public String getSuitName ()
   {
      return suitName;
   }

   //-----------------------------------------------------------------
   //  Returns the string representation of this card, including
   //  both face and suit.
   //-----------------------------------------------------------------



   public String toString ()
   {
      return getFaceName() + " of " + getSuitName();
   }
}

我的牌组类如下

import java.util.*;


public class DeckOfCards 
{

    private Card deckOfCards[];
    private int currentCardUsed;
    private final int NumberOfCards = 52;

    private int nextCard;

    private Random rand;

    String myString = "All Cards have been dealt.";




    public DeckOfCards()
    {
        deckOfCards = new Card[NumberOfCards];
        currentCardUsed = 0;

        rand = new Random();

        for(int index = 0; index < deckOfCards.length; index ++)
        {
            deckOfCards[index] = new Card();
        }
    }

    public void shuffleCards()
    {
            currentCardUsed = 0;

            for(int newCard = 0; newCard < deckOfCards.length; newCard ++)
            {
                int nextCard = rand.nextInt(NumberOfCards);

                Card temporaryDeck = deckOfCards[newCard];
                deckOfCards[newCard] = deckOfCards[nextCard];
                deckOfCards[nextCard] = temporaryDeck;
            }
    }

    public Card dealCard()
    {
        if(currentCardUsed < deckOfCards.length)
        {
            return deckOfCards[currentCardUsed ++];
        }
        else
        {
            return null;
        }
    }
}

我的驱动程序类如下

public class DeckTester 
{
    public static void main(String [] args)
    {
        DeckOfCards deck = new DeckOfCards();

        deck.shuffleCards();

        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());

        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());
        System.out.println(deck.dealCard());



    }
}

输出:

Two of null
Ace of Hearts
Two of null
Four of null
Ace of null
Ace of Spades
Two of Diamonds
Ace of Clubs
Ace of null

任何关于为什么并非所有卡片都有值(value)的帮助将不胜感激,

最佳答案

简单错误:

改变

   public Card ()
   {
      face = rand.nextInt(4) + 1;
      setFaceName();

      suit = rand.nextInt(13) + 1;
      setSuitName();
   }

   public Card ()
   {
      face = rand.nextInt(13) + 1;
      setFaceName();

      suit = rand.nextInt(4) + 1;
      setSuitName();
   }

其他建议:

  • 使用枚举,而不是魔法数字,这样就不会出现这种困惑。
  • 不要随机创建牌,创建完整的牌组并洗牌。

关于java - 输出为空,而其他则不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772173/

相关文章:

Java 命令有效,但 javac 命令无效

java - hibernate @OneToOne(fetch = FetchType.LAZY) 不工作

java - 通过 SSH 在远程计算机上运行 jar 时未创建日志

java - android中2个 View 之间的碰撞

java - 如何使用 Javafx Canvas 绘制一条 1 像素的线?

java - hibernate createSQLQuery 使用CacheQuery?

java - JButton 定位问题

java - jboss-as maven 插件 : undeploy by reg-ex does not work

java - MacOS 无法为您的平台加载 native hadoop 库...在适用的情况下使用内置 java 类

java - 在 Android 中测量 DHCP 时间