Java - Cómo crear una baraja de cartas (con un enfoque en las matrices estáticas)? - Proyecto de Ciencias de la Computación AP

user9125722:

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.

El instinto:

He encontrado tristemente pocos errores lógicos, especialmente con la numberOfCardsint que utilizó como índice de la cardsmatriz. Como resultado, he optimizado y fija tu class Deck, que trabaja con el método principal y class Cardque 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176180&siteId=1
Recomendado
Clasificación