Ich versuche, ein Java-Programm zu entwickeln, das ein Spiel ist, dass Verwendungen Aufzählungstypen / Klassen für die Darstellung Spielkarten. Ich möchte Aufzählungstypen verwenden, um mögliche Klagen und möglichen Rängen zu vertreten. Das Spiel zieht zufällig zwei Karten aus einem Kartenspiel und vergleicht sie.
Ich habe 4 Klassen nämlich SimpleCardGame, Karte, Rang und Anzug. Derzeit habe ich Probleme mit SimpleCardGame und Card.
Für SimpleCardGame ist mein einziges Problem Instanziieren das Deck von Karten. Was habe ich falsch gemacht? Sobald ich in der Lage bin, das zu lösen, wird der gesamte Teil unterhalb der „SIE MÜSSEN NICHT ZU ÄNDERN alles unter“ gut funktionierend werden.
Für Karte, gibt es eine Methode public int compareTo (Karte c) dass die Erträge genannt
ein. -1, wenn das Objekt Aufruf dieser Methode ist kleiner als c
b. 0, wenn das Objekt Aufruf dieser Methode ist die gleiche wie c
c. 1, wenn das Objekt dem Aufruf dieser Methode ist größer als c
Karte c1 kleiner als c2, wenn der Rang von c1 kleiner als c2 ist, oder wenn die Reihen von C1 und C2 gleich sind, der Anzug von c1 kleiner ist als c2. Um von Anzügen: Spaten> Heart> Club> Diamanten Rangordnung: A> K> Q> J> 10> 9> 8> 7> 6> 5> 4> 3> 2
Also mein Problem dafür ist, wie kann ich die Kartenwerte vergleichen? Ich denke die Ordnungswertmethode zu verwenden, aber ich bin nicht ganz sicher, wie es zu benutzen.
public class SimpleCardGame {
public static void main(String[] args) {
Card cards[]; // an array of Cards, representing a deck of cards
// put a copy of each card into cards
// The order of the cards in the array is:
// S2, S3, ..., SK, H2, ..., HK, C2, ..., CK, D2, ..., DK
int i = 0;
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(s,r);
i++;
}
}
}
//
// YOU DO NOT HAVE TO MODIFY ANYTHING BELOW
//
// print out the whole deck once
System.out.println("The whole deck is:");
for (Card card : cards)
System.out.print(card + " ");
System.out.println();
// randomly draw two cards
MyRandom rnd = new MyRandom();
Card c1 = cards[rnd.nextInt(cards.length)-1];
Card c2 = cards[rnd.nextInt(cards.length)-1];
System.out.println("Two cards are drawn:");
System.out.println("c1 = " + c1 + " and c2 = " + c2);
// compare c1 and c2
if (c1.compareTo(c2) < 0) {
System.out.println(c1 + " is smaller than " + c2);
}
else if (c1.compareTo(c2) == 0) {
System.out.println(c1 + " is the same as " + c2);
}
else {
System.out.println(c1 + " is larger than " + c2);
}
}
}
public class Card {
private Rank rank;
private Suit suit;
public Card (Suit suit, Rank rank) {
this.rank = rank;
this.suit = suit;
}
public String toString() {
return suit + "" + rank;
}
public int compareTo(Card c) {
int diffRank = rank - c.rank;
if (diffRank < 0) {
return -1;
}
else if (diffRank > 0) {
return 1;
}
else if (diffRank == 0) {
int diffSuit = suit - c.suit;
if (diffSuit < 0) {
return -1;
}
else if (diffSuit > 0) {
return 1;
}
}
return 0;
}
}
public enum Rank {
TWO("2"),
THREE("3"),
FOUR("4"),
FIVE("5"),
SIX("6"),
SEVEN("7"),
EIGHT("8"),
NINE("9"),
TEN("10"),
JACK("J"),
QUEEN("Q"),
KING("K"),
ACE("A");
private String rank;
// Constructor
Rank (String r) {
rank = r;
}
public String toString() {
return rank;
}
}
public enum Suit {
SPADE("S"),
HEART("H"),
CLUB("C"),
DIAMOND("D");
private String suit;
Suit (String s) {
suit = s;
}
public String toString() {
return suit;
}
}
Im Folgenden finden Sie die vermeintliche Beispielausgabe des Programms.
The whole deck is:
S2 S3 S4 S5 S6 S7 S8 S9 S10 SJ SQ SK SA H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK HA C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK CA D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DQ DK DA
Two cards are drawn:
c1 = S7 and c2 = HQ
S7 is smaller than HQ
Für SimpleCardGame ist mein einziges Problem Instanziieren das Deck von Karten. Was habe ich falsch gemacht?
Ja, Ihr Array Instanziierung ist nicht richtig. Sie müssen die Array-Größe angeben, wenn Sie es erklären. So in der aktuellen Situation kann der richtige Weg sein:
Card cards[] = new Card[Suit.values().length * Rank.values().length];
PS: Ich habe nicht vollständig das ganze Problem und Code analysiert. Also, wenn es Ihr Problem an einem gewissen Punkt löst können wir vorwärts gehen. (Auch gibt es einige Formatierungen und Kompilierung Probleme in Ihrem Code)