Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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 - Fatal编程技术网

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是什么,但卡不应该实现
可比的