当然,这可能是我很容易就误解了的简单事情,但是我必须确定。

我正在努力使经典的PlayingCard类与PlayingCard测试器一起运行,以对其进行测试以作为作业。现在,当完成全部操作后,我还将拥有一个Pack类,用于产生一副纸牌并将其改组,以及在PlayingCard类中使用equals方法,但是现在,我只想获取基本的PlayingCard类来与测试人员一起工作。

这是当前为PlayingCard类设置的设置,忽略i的int语句,因为这是在for循环的帮助下用于随机数生成器的,但是已经或应该使用PlayingCard构造函数使其变得多余。

public class PlayingCard
{
   public PlayingCard(int rank, int suit)
   {
       this.rank = rank;
       this.suit = suit;
   }


   // Values for rank
   public final int TWO = 2;
   public final int THREE = 3;
   public final int FOUR = 4;
   public final int FIVE = 5;
   public final int SIX = 6;
   public final int SEVEN = 7;
   public final int EIGHT = 8;
   public final int NINE = 9;
   public final int TEN = 10;
   public final int JACK = 11;
   public final int QUEEN = 12;
   public final int KING = 13;
   public final int ACE = 14;

   // Values for suits
   public final int CLUBS = 0;
   public final int DIAMONDS = 1;
   public final int HEARTS = -1;
   public final int SPADES = -2;

   // Set random Rank and Suit values
   public int rank;
   public int suit;
   public int i;

   public int getRank()
   {
      return rank;
   }

   public int getSuit()
   {
      return suit;
   }

   @Override
   public String toString()
   {
      return getClass().getName() + "[rank " + rank + "suit " + suit + "]";
   }

   public void format()
   {
      System.out.format(rank + " of " + suit);
   }
}


这是当前的测试人员,请注意,我在班级中使用了基于等级和西服值的一组值。

public class PlayingCardTester
{
    public static void main(String[] args)
    {
       PlayingCard test;
       test = new PlayingCard(14, 1);
       test.getRank();
       test.getSuit();
       test.toString();
       test.format();
       System.out.println("");
    }

}


放入构造函数中的值应在类的方法中使用。我想要的实际测试人员和班级的输出是这样的:

Ace of Diamonds


相反,我得到这个:

0 of 0


我要问的是,如何在测试器和类中实现的方法中使用构造函数中给出的值,以便获得所需的输出?这些值的使用本意是与该类中指定的那些值相关,但有些信息告诉我它们实际上是无用的,或者在实际的类中没有使用。这可能是我遗漏但无法找到的相当简单的东西,或者我对它是如此的愚蠢,但是我想确定是否需要更复杂的东西。

忠告?

编辑:将详细信息添加到构造函数,现在我有输出:

14 of 1

最佳答案

您实际上有两个独立的问题。如另一个答案所述,第一个问题是您没有将传递给类的构造函数的变量分配给相应的实例变量。

您遇到的第二个问题是您正在设置int值来表示Rank和Suit,但是在PlayingCard类中未提供相应的String表示。

您可以通过创建类似以下的数组来进行排名:

String ranks [] = {"TWO","THREE"...};


并在format()中使用ranks[rank -2]

由于整数表示形式具有非顺序值,因此您需要使用其他数据结构(例如Map)。

但是,更简单的方法是创建以下两个枚举。然后,您将创建一个新卡,例如:

PlayingCard card = new PlayingCard(Rank.ACE, Suit.SPADES);


西装枚举:

public enum Suit {

    HEARTS(0), SPADES(-2), CLUBS(-1), DIAMONDS(1);

    private int value;

    private Suit(int value){
        this.value = value;
    }

    public int getValue(){
        return value;
    }
}


排名的枚举:

public enum RANK {

    TWO(2), THREE(3), ACE(14);

    private int value;

    private Suit(int value){
        this.value = value;
    }

    public int getValue(){
        return value;
    }
}


纸牌:

public class PlayingCard
{
    private Rank rank;
    private Suit suit;

    public PlayingCard(Rank rank, Suit suit)
    {
        this.rank = rank;
        this.suit = suit;
    }

    public Rank getRank()
    {
        return rank;
    }

    public Suit getSuit()
    {
        return suit;
    }

    @Override
    public String toString()
    {
        return getClass().getName() + "[rank " + rank + "suit " + suit + "]";
    }

    public void format()
    {
        System.out.format(rank + " of " + suit);
    }
}

10-07 21:01