Java - Como criar um baralho de cartas (com foco em matrizes estáticos)? - Projeto de Ciência da Computação AP

user9125722:

esta é a minha primeira pergunta que nunca. Só para esclarecer, eu verificar para ver se havia alguma dúvida de que poderia ter me ajudado antes de perguntar isso. Desculpas antecipadamente se eu fizer qualquer coisa erradamente, eu sou novo.

De qualquer forma, para minha classe AP CS Devo fazer um baralho de cartas e imprimi-lo na janela de texto. Eu acredito que eu estou muito perto de ser concluído. Como o título diz, em geral, como faço para criar um baralho de cartas com foco em matrizes estáticas? Mas, além disso, (Após o erro que eu perguntar sobre a seguir é resolvido), quando se olha para o código que produziram até agora, é que a maneira correta de fazê-lo?

Aqui está o código dado (ou seja, isso não pode ser alterado):

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 + "]";
   }
}

E aqui está o que eu tenho codificado até agora:

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 ++;
            }
         }
      }
   }
}

Olhando para o meu código, eu tenho certeza que há uma maneira melhor de se livrar de todos aqueles se as declarações e fazer tudo mais curto e conciso. Minha espécie de terceira questão (que pode ser necessária ajuda / força para resolver antes de responder às duas principais questões) é como faço para corrigir este erro quando eu executar o programa ?:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 52
    at Deck.<init>(Lab11bst.java:89)
    at Lab11bst.main(Lab11bst.java:5)

Muito obrigado antecipadamente.

Instinto :

I infelizmente encontrou alguns erros lógicos, especialmente com o numberOfCardsint que você usou como o índice para a cardsmatriz. Como resultado, eu otimizado e fixa o seu class Deck, ele trabalha com o método principal e class Cardque você criou:

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++;
            }
        }
    }
}

Ele enche o Card[] cards, sinta-se livre para testá-lo usando um getter e SystemOut. É muito adaptável para cardnaming e valuesetting, como você pode preencher as matrizes de acordo com qualquer informação que você deseja. Se você quiser mais explicações, deixe-me saber.

Acho que você gosta

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