Eu estou tentando desenvolver um programa Java que é um jogo que usa enumerados tipos / classes para representando cartas de jogar. Eu quero usar tipos enumerados para representar possíveis fatos e possíveis fileiras. O jogo chama aleatoriamente duas cartas de um baralho de cartas e compara-los.
Eu tenho 4 classes nomeadamente SimpleCardGame, cartão, valor e naipe. Atualmente, estou tendo problemas com SimpleCardGame e cartão.
Para SimpleCardGame, a minha única questão é instanciar o baralho de cartas. O que eu fiz errado? Uma vez que eu sou capaz de resolver isso, toda a parte abaixo do "qualquer coisa que você não tem que modificar ABAIXO" será funcionando perfeitamente.
Para o cartão, há um método chamado public int compareTo (cartão c) que retorna
uma. -1 se o objecto chamar este método é menor do que c
b. 0 se o objeto de chamar esse método é o mesmo que c
c. 1, se o objecto de chamar este método é maior do que c
Cartão c1 é menor do que c2 se o posto de c1 é menor do que c2, ou se as fileiras de c1 e c2 são os mesmos, o terno de c1 é menor do que c2. Ordem de Suits: Pá> Coração> Clube> Diamante Ordem dos Ranks: A> K> Q> J> 10> 9> 8> 7> 6> 5> 4> 3> 2
Então o meu problema para isso é como faço para comparar os valores das cartas? Estou pensando em usar o método do valor ordinal, mas não tenho certeza de como usá-lo.
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;
}
}
Abaixo está o exemplo de saída suposto do programa.
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
Para SimpleCardGame, a minha única questão é instanciar o baralho de cartas. O que eu fiz errado?
Sim, sua instanciação matriz não é adequada. Você deve especificar o tamanho da matriz quando você declará-lo. Assim, na situação atual, a maneira correta pode ser:
Card cards[] = new Card[Suit.values().length * Rank.values().length];
PS: Eu não tenho totalmente analisado todo o problema e código. Então, se ele resolve o seu problema em algum momento podemos ir para a frente. (Também existem alguns problemas de formatação e compilação em seu código)