k778899:
Estoy creando una clase de tarjeta que le da un valor de palo y el rango de una tarjeta. Mi problema es que sólo se crea una tarjeta y que es el único que imprime a pesar de que mi método principal crean nuevas tarjetas a prueba. Lo que necesito son diferentes tarjetas creadas a prueba si son iguales. Cualquier ayuda en cuanto a qué método es mi problema sería de apreciar. Esta es una experiencia de aprendizaje para mí, así como la identificación de orientación soluciones no exactas.
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);
}
}
Shreyas Srivastava:
El error está en su toString
método. Es necesario poner puntos de interrupción en sus estados de cuenta de casos, como a continuación:
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;
}