如何从构造函数中获取值到方法中?
How to get a value from a constructor into a method?
当然,这可能是我误看的相当简单的东西,但我必须确定。
我正在努力获得一个 classic PlayingCard class 运行 一个 PlayingCard 测试仪来测试它作为一项任务。现在,当整个事情完成后,我将有一个 Pack class 以及用于生成一副纸牌并洗牌的纸牌,以及 PlayingCard class 中的 equals 方法,但现在,我只想获得基本的 PlayingCard class 以与测试仪一起工作。
这是 PlayingCard Class 的当前设置,忽略 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);
}
}
这是当前测试员,请注意,我使用了一组基于 class 中等级和花色值的值。
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("");
}
}
class 的方法中应该使用构造函数中的值。我想要的实际测试仪和 class 的输出是这样的:
Ace of Diamonds
相反,我得到这个:
0 of 0
我想问的是,如何在测试器和 class 实现的方法中使用构造函数中给出的值,以便获得我想要的输出?这些值的使用意在与 class 中指定的值相关,但有些东西告诉我它们实际上无用或未在实际 class 中使用。这可能是我错过但找不到的相当简单的东西,或者我自己对此非常愚蠢,但我想确定以防万一需要更复杂的东西。
建议?
编辑:将详细信息添加到构造函数,现在我有输出:
14 of 1
您需要将参数从构造函数设置到您的实例。
public PlayingCard(int rank, int suit)
{
this.rank = rank;
this.suit = suit;
}
因为这个构造函数有两个参数但不对它们做任何事情。
public PlayingCard(int rank, int suit)
{
}
因为 int 自然设置为 0,所以你得到两个 0。
你实际上有两个不同的问题。第一个问题是,如另一个答案所述,您没有将传递给 class 的构造函数的变量分配给相应的实例变量。
您遇到的第二个问题是您正在设置 int 值来表示等级和花色,但没有在您的 PlayingCard class 中提供相应的字符串表示。
你可以通过创建一个数组来为排名做到这一点:
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);
}
}
当然,这可能是我误看的相当简单的东西,但我必须确定。
我正在努力获得一个 classic PlayingCard class 运行 一个 PlayingCard 测试仪来测试它作为一项任务。现在,当整个事情完成后,我将有一个 Pack class 以及用于生成一副纸牌并洗牌的纸牌,以及 PlayingCard class 中的 equals 方法,但现在,我只想获得基本的 PlayingCard class 以与测试仪一起工作。
这是 PlayingCard Class 的当前设置,忽略 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);
}
}
这是当前测试员,请注意,我使用了一组基于 class 中等级和花色值的值。
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("");
}
}
class 的方法中应该使用构造函数中的值。我想要的实际测试仪和 class 的输出是这样的:
Ace of Diamonds
相反,我得到这个:
0 of 0
我想问的是,如何在测试器和 class 实现的方法中使用构造函数中给出的值,以便获得我想要的输出?这些值的使用意在与 class 中指定的值相关,但有些东西告诉我它们实际上无用或未在实际 class 中使用。这可能是我错过但找不到的相当简单的东西,或者我自己对此非常愚蠢,但我想确定以防万一需要更复杂的东西。
建议?
编辑:将详细信息添加到构造函数,现在我有输出:
14 of 1
您需要将参数从构造函数设置到您的实例。
public PlayingCard(int rank, int suit)
{
this.rank = rank;
this.suit = suit;
}
因为这个构造函数有两个参数但不对它们做任何事情。
public PlayingCard(int rank, int suit)
{
}
因为 int 自然设置为 0,所以你得到两个 0。
你实际上有两个不同的问题。第一个问题是,如另一个答案所述,您没有将传递给 class 的构造函数的变量分配给相应的实例变量。
您遇到的第二个问题是您正在设置 int 值来表示等级和花色,但没有在您的 PlayingCard class 中提供相应的字符串表示。
你可以通过创建一个数组来为排名做到这一点:
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);
}
}