esta es mi primera pregunta nunca. Solo para aclarar, yo comprobar para ver si había alguna pregunta que podría me han ayudado antes de hacer esto. Disculpas por adelantado si no hago algo incorrecto, soy nuevo.
De todas formas, para mi clase de AP CS debo hacer una cubierta de unas tarjetas e imprimirlo en la ventana de texto. Creo que soy muy cerca de ser terminado. Como dice el título, en general, ¿cómo puedo crear una baraja de cartas con un enfoque en las matrices estáticas? Pero, además, (Después se resuelve el error me pregunte por abajo), cuando se mira en el código He producido hasta ahora, es que la forma correcta de hacerlo?
Aquí está el código dado (lo que significa que no se puede cambiar):
public class Card
{
private String suit;
private String rank;
private int value;
public Card(String s, String r, int v)
{
suit = s;
rank = r;
value = v;
}
public String getSuit() { return suit; }
public String getRank() { return rank; }
public int getValue() { return value; }
public void setSuit(String s) { suit = s; }
public void setRank(String r) { rank = r; }
public void setValue(int v) { value = v; }
public String toString()
{
return "[" + suit + ", " + rank + ", " + value + "]";
}
}
Y aquí está el lo que he codificado hasta el momento:
public class Lab11bst
{
public static void main(String[] args)
{
Deck deck = new Deck();
System.out.println(deck);
}
}
class Deck
{
private int numberOfCards;
private Card [] cards;
private String [] suits = {"Clubs","Diamonds","Hearts","Spades"};
private String rank;
private int value;
public Deck() // This creates a deck of 52 playing cards.
{
numberOfCards = 52;
cards = new Card[52];
for ( int suit = 0; suit <= 3; suit++ )
{
String [] ranks = {"Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};
for ( int rank = 1; rank <= 13; rank++ )
{
if (rank == 1)
{
this.rank = "Ace";
}
else if (rank == 11)
{
this.rank = "Jack";
}
else if (rank == 12)
{
this.rank = "Queen";
}
else if (rank == 13)
{
this.rank = "King";
}
else
{
this.rank = "" + ranks[rank];
}
for ( int value = 1; value <= 10; value++ )
{
if (this.rank == "Ace")
{
value = 1;
}
else if (this.rank == "Jack")
{
value = 10;
}
else if (this.rank == "Queen")
{
value = 10;
}
else if (this.rank == "King")
{
value = 10;
}
else
{
this.value = value;
}
cards [numberOfCards] = new Card(suits[suit],this.rank,value);
numberOfCards ++;
}
}
}
}
}
En cuanto a mi código, estoy bastante seguro de que hay una mejor manera de deshacerse de todos aquellos sentencias if y hacerlo todo más corto y conciso. Mi clase-de tercera pregunta (que puede ser de ayuda / fuerza necesaria para resolver antes de responder a las dos preguntas principales) es ¿cómo puedo solucionar este error al ejecutar el programa ?:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 52
at Deck.<init>(Lab11bst.java:89)
at Lab11bst.main(Lab11bst.java:5)
Muchas gracias por adelantado.
He encontrado tristemente pocos errores lógicos, especialmente con la numberOfCards
int que utilizó como índice de la cards
matriz. Como resultado, he optimizado y fija tu class Deck
, que trabaja con el método principal y class Card
que ha creado:
class Deck {
private int numberOfCards = 52;
private Card[] cards;
private String[] suits = { "Clubs", "Diamonds", "Hearts", "Spades" };
String[] ranks = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen",
"King" };
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };
private String rank;
private int value;
public Deck() // This creates a deck of 52 playing cards.
{
cards = new Card[numberOfCards];
int currentCardId = 0;
for (int suit = 0; suit <= 3; suit++) {
for (int rank = 0; rank <= 12; rank++) {
this.rank = "" + ranks[rank];
this.value = values[rank];
cards[currentCardId] = new Card(suits[suit], this.rank, value);
System.out.println(cards[currentCardId].toString()); //print out the cards .toString() as it was added to the array
currentCardId++;
}
}
}
}
Se llena el Card[] cards
, no dude en probarlo mediante el uso de un captador y SystemOut. Es muy adaptable a cardnaming y valuesetting, como se puede llenar las matrices de acuerdo con la información que desee. Si desea una explicación más detallada, que me haga saber.