Java 生成新卡对象的卡类
我正在创建一个卡片类,该类为一张卡片提供一个套装和等级的值。我的问题是,它只创建了一张卡,而这是唯一一张打印的卡,即使我的主要方法创建了新卡进行测试。 我需要的是创建不同的卡来测试它们是否相等。如果您能帮助我解决问题的方法,我们将不胜感激。这对我来说是一次学习经历,所以我喜欢指导而不是精确的解决方案Java 生成新卡对象的卡类,java,Java,我正在创建一个卡片类,该类为一张卡片提供一个套装和等级的值。我的问题是,它只创建了一张卡,而这是唯一一张打印的卡,即使我的主要方法创建了新卡进行测试。 我需要的是创建不同的卡来测试它们是否相等。如果您能帮助我解决问题的方法,我们将不胜感激。这对我来说是一次学习经历,所以我喜欢指导而不是精确的解决方案 enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES }; enum Rank { ACE, TWO, THREE, FOUR, FIVE, SI
enum Suit {
HEARTS, DIAMONDS, CLUBS, SPADES
};
enum Rank {
ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING
};
public class Card {
private Rank aRank;
private Suit aSuit;
public Card(Suit aSuit, Rank aRank) {
this.aSuit = aSuit;
this.aRank = aRank;
}
public Rank getRank() {
return aRank;
}
public Suit getSuit() {
return aSuit;
}
public String toString() {
String cardValue = "";
String rank = "";
String suit = "";
switch (aSuit) {
case HEARTS:
suit = "hearts";
case DIAMONDS:
suit = "diamonds";
case CLUBS:
suit = "clubs";
case SPADES:
suit = "spades";
}
switch (aRank) {
case ACE:
rank = "Ace";
case TWO:
rank = "2";
case THREE:
rank = "3";
case FOUR:
rank = "4";
case FIVE:
rank = "5";
case SIX:
rank = "6";
case SEVEN:
rank = "7";
case EIGHT:
rank = "8";
case NINE:
rank = "9";
case TEN:
rank = "10";
case JACK:
rank = "Jack";
case QUEEN:
rank = "Queen";
case KING:
rank = "King";
}
cardValue += rank + " of " + suit;
return cardValue;
}
public int compareTo(Card other) {
int rankComparison = aRank.compareTo(other.aRank);
return rankComparison != 0 ? rankComparison : aSuit.compareTo(other.aSuit);
}
public boolean equals(Card other) {
if (aRank == other.aRank)
return true;
if (aSuit == other.aSuit)
return true;
return false;
}
// Main method to test.
public static void main(String[] args) {
Card c1 = new Card(Suit.SPADES, Rank.FIVE);
Card c2 = new Card(Suit.HEARTS, Rank.TWO);
Card c3 = new Card(Suit.CLUBS, Rank.EIGHT);
Card c4 = new Card(Suit.DIAMONDS, Rank.FIVE);
Card r1 = new Card(Suit.CLUBS, Rank.ACE);
Card r2 = new Card(Suit.DIAMONDS, Rank.JACK);
Card r3 = new Card(Suit.HEARTS, Rank.QUEEN);
Card r4 = new Card(Suit.SPADES, Rank.KING);
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
if (c1.compareTo(c2) < 0)
System.out.println(c2 + " outranks " + c1);
else if (c1.compareTo(c2) > 0)
System.out.println(c1 + " outranks " + c2);
if (c1.compareTo(c3) < 0)
System.out.println(c3 + " outranks " + c1);
else if (c1.compareTo(c3) > 0)
System.out.println(c1 + " outranks " + c3);
if (c1.compareTo(c1) == 0)
System.out.println(c1 + " is equal to " + c1);
else
System.out.println(c1 + " is NOT equal to " + c1);
if (c1.equals(c4))
System.out.println(c1 + " is equal to " + c4);
else
System.out.println(c1 + " is NOT equal to " + c4);
if (r1.compareTo(r2) < 0)
System.out.println(r1 + " comes before " + r2);
else if (r1.compareTo(r2) > 0)
System.out.println(r1 + " comes after " + r2);
else
System.out.println(r1 + " is equal to " + r2);
if (r4.compareTo(r3) < 0)
System.out.println(r4 + " comes before " + r3);
else if (r4.compareTo(r3) > 0)
System.out.println(r4 + " comes after " + r3);
else
System.out.println(r4 + " is equal to " + r3);
}
}
enum套装{
红心、钻石、梅花、黑桃
};
枚举秩{
ACE,二,三,四,五,六,七,八,九,十,杰克,王后,国王
};
公务舱卡{
私人等级的阿兰克;
私人诉讼;
公共卡(适用于aSuit,等级为aRank){
this.aSuit=aSuit;
this.aRank=aRank;
}
公共等级getRank(){
返回aRank;
}
公诉状{
归还它;
}
公共字符串toString(){
字符串cardValue=“”;
字符串秩=”;
串西装=”;
开关(aSuit){
案例心脏:
suit=“hearts”;
案例钻石:
suit=“钻石”;
案例俱乐部:
suit=“俱乐部”;
黑桃:
suit=“黑桃”;
}
交换机(aRank){
案例ACE:
rank=“Ace”;
案例二:
rank=“2”;
案例三:
rank=“3”;
案例四:
rank=“4”;
案例五:
rank=“5”;
案例六:
rank=“6”;
案例七:
rank=“7”;
案例八:
rank=“8”;
案例九:
rank=“9”;
案例十:
rank=“10”;
箱子千斤顶:
rank=“杰克”;
案件女王:
rank=“女王”;
案例王:
rank=“国王”;
}
cardValue+=等级+“+诉讼;
返回值;
}
公共int比较(卡其他){
int rankComparison=aRank.comparito(other.aRank);
return rankComparison!=0?rankComparison:aSuit.compareTo(other.aSuit);
}
公共布尔等于(其他卡){
if(aRank==other.aRank)
返回true;
if(aSuit==其他.aSuit)
返回true;
返回false;
}
//主要测试方法。
公共静态void main(字符串[]args){
卡c1=新卡(套装黑桃,等级5);
卡c2=新卡(西服红心,等级2);
卡c3=新卡(西服俱乐部,排名第八);
卡c4=新卡(西服钻石,等级5);
卡r1=新卡(西服。俱乐部,等级。ACE);
卡r2=新卡(西服。钻石,军衔。杰克);
卡r3=新卡(西服。红心,军衔。女王);
卡牌r4=新卡牌(套装。黑桃,等级。国王);
系统输出打印LN(c1);
系统输出打印LN(c2);
系统输出打印项次(c3);
如果(c1.与(c2)相比<0)
系统输出打印LN(c2+“超过等级”+c1);
如果(c1.与(c2)>0相比)
系统输出打印LN(c1+“高于等级”+c2);
如果(c1.与(c3)相比<0)
系统输出打印LN(c3+“超过等级”+c1);
如果(c1.与(c3)>0相比)
System.out.println(c1+“高于等级”+c3);
如果(c1.与(c1)==0相比)
系统输出打印Ln(c1+“等于”+c1);
其他的
系统输出打印Ln(c1+“不等于”+c1);
如果(c1等于(c4))
系统输出打印Ln(c1+“等于”+c4);
其他的
系统输出打印Ln(c1+“不等于”+c4);
if(r1.与(r2)<0相比)
System.out.println(r1+“位于”+r2之前);
如果(r1.与(r2)>0相比)
System.out.println(r1+“位于”+r2之后);
其他的
系统输出打印Ln(r1+“等于”+r2);
如果(r4.与(r3)<0相比)
System.out.println(r4+“位于”+r3之前);
如果(r4.与(r3)>0相比)
System.out.println(r4+“位于”+r3之后);
其他的
System.out.println(r4+“等于”+r3);
}
}
错误在您的toString
方法中。您需要在case语句中设置断点,如下所示:
public String toString() {
String cardValue = "";
String rank = "";
String suit = "";
switch (aSuit) {
case HEARTS:
suit = "hearts";
break;
case DIAMONDS:
suit = "diamonds";
break;
case CLUBS:
suit = "clubs";
break;
case SPADES:
suit = "spades";
break;
}
switch (aRank) {
case ACE:
rank = "Ace";
break;
case TWO:
rank = "2";
break;
case THREE:
rank = "3";
break;
case FOUR:
rank = "4";
break;
case FIVE:
rank = "5";
break;
case SIX:
rank = "6";
break;
case SEVEN:
rank = "7";
break;
case EIGHT:
rank = "8";
break;
case NINE:
rank = "9";
break;
case TEN:
rank = "10";
break;
case JACK:
rank = "Jack";
break;
case QUEEN:
rank = "Queen";
break;
case KING:
rank = "King";
break;
}
cardValue += rank + " of " + suit;
return cardValue;
}
您正在创建8张不同的卡,但您的toString()方法错误,请尝试以下代码:
System.out.println("c1suit: " + c1.getSuit());
System.out.println("c2suit: " + c2.getSuit());
System.out.println("c3suit: " + c3.getSuit());
这表明这些卡片的套装是不同的
但是,当您这样做时:
System.out.println(c1)
它将调用toString(),这就是问题所在
也看看如何
为了获得良好的实践,还应添加一个默认值:
default:
suit = "unknown";
}
您需要修复这两个switch语句
这应该会发现您的bug。不确定您的bug是什么,但卡不应该实现
可比的?