Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将值从构造函数中获取到方法中?_Java_Oop_Methods_Constructor - Fatal编程技术网

Java 如何将值从构造函数中获取到方法中?

Java 如何将值从构造函数中获取到方法中?,java,oop,methods,constructor,Java,Oop,Methods,Constructor,诚然,这可能是我错看了一些相当简单的东西,但我必须确定 我正在使用PlayingCard测试仪运行一个经典的PlayingCard类,将其作为一项任务进行测试。现在,当整个过程完成后,我将有一个Pack类来生成一组卡片并将其洗牌,还有PlayingCard类中的equals方法,但现在,我只想让基本PlayingCard类与测试人员一起工作 这是PlayingCard类的当前设置,忽略i的int语句,就像是在for循环的帮助下为随机数生成器设置的一样,但是它已经或者更确切地说,应该使用Playi

诚然,这可能是我错看了一些相当简单的东西,但我必须确定

我正在使用PlayingCard测试仪运行一个经典的PlayingCard类,将其作为一项任务进行测试。现在,当整个过程完成后,我将有一个Pack类来生成一组卡片并将其洗牌,还有PlayingCard类中的equals方法,但现在,我只想让基本PlayingCard类与测试人员一起工作

这是PlayingCard类的当前设置,忽略i的int语句,就像是在for循环的帮助下为随机数生成器设置的一样,但是它已经或者更确切地说,应该使用PlayingCard构造函数呈现为redundent

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
我要问的是,如何在tester和类中实现的方法中使用构造函数中给定的值,以便获得所需的输出?使用的值意味着与类中指定的值相关,但有些东西告诉我它们实际上是无用的,或者没有在实际的类中使用。这可能是我错过了但找不到的很简单的东西,或者我自己在这件事上太愚蠢了,但我想确定一下,万一需要更复杂的东西

建议

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

14 of 1

您需要将参数从构造函数设置到实例

public PlayingCard(int rank, int suit)
       {
          this.rank = rank;
          this.suit = suit;
       }
因为此构造函数接受两个参数,但不处理它们

public PlayingCard(int rank, int suit)
       {

       }

因为int自然设置为0,所以得到两个0。

您需要将构造函数中的参数设置为实例

public PlayingCard(int rank, int suit)
       {
          this.rank = rank;
          this.suit = suit;
       }
因为此构造函数接受两个参数,但不处理它们

public PlayingCard(int rank, int suit)
       {

       }

因为int自然设置为0,所以得到两个0。

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

第二个问题是,您正在设置int值来表示等级和等级,但在PlayingCard类中没有提供相应的字符串表示

您可以通过创建如下数组来为列组执行此操作:

String ranks [] = {"TWO","THREE"...};
并在format()中使用
ranks[rank-2]

由于整数表示具有非连续值,因此需要使用另一个数据结构(如映射)

但是,实现所有这些的一种更简单的方法是创建两个枚举,如下所示。然后,您将创建一张新卡,如:

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);
    }
}

实际上你有两个不同的问题。第一个问题是,正如在另一个答案中所指出的,您没有将传递给类的构造函数的变量分配给相应的实例变量

第二个问题是,您正在设置int值来表示等级和等级,但在PlayingCard类中没有提供相应的字符串表示

您可以通过创建如下数组来为列组执行此操作:

String ranks [] = {"TWO","THREE"...};
并在format()中使用
ranks[rank-2]

由于整数表示具有非连续值,因此需要使用另一个数据结构(如映射)

但是,实现所有这些的一种更简单的方法是创建两个枚举,如下所示。然后,您将创建一张新卡,如:

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);
    }
}

我不熟悉枚举,有什么像样的链接或解释吗?我还注意到,我猜这些枚举应该在单独的文件中?我不熟悉枚举,有什么像样的链接或解释吗?我还注意到,我猜这些枚举应该在单独的文件中?