Erro

5 respostas
edymrex

estou estudando pela livro da deitel e acho que encontrei um erro em um dos diversos exemplos que contém o livro

private Card deck[]; // array de objetos Card
   private int currentCard; // índice do próximo Card a ser distribuído
   private final int NUMBER_OF_CARDS = 52; // número constante de     Cards
   private Random randomNumbers; // gerador de número aleatório

   Não está errada está declaração de array..??
   private Card deck[]; // array de objetos Card

   pois não mostra de qual tipo é o array ou está certo..???
   estranho tb que o complilador não acusa erro..!
   irei colocar a classe completa para ficar mais fácil o
   entedimento

Classe DeckOfCards

import java.util.Random;

public class DeckOfCards
{
   private Card deck[]; // array de objetos Card
   private int currentCard; // índice do próximo Card a ser distribuído
   private final int NUMBER_OF_CARDS = 52; // número constante de Cards
   private Random randomNumbers; // gerador de número aleatório

   // construtor preenche baralho de cartas
   public DeckOfCards()
   {
      String faces[] = { "Ace", "Deuce", "Three", "Four", "Five", "Six",
         "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };    
      String suits[] = { "Hearts", "Diamonds", "Clubs", "Spades" };     

      deck = new Card[ NUMBER_OF_CARDS ]; // cria array de objetos Card
      currentCard = 0; // configura currentCard então o primeiro Card distribuído é deck[ 0 ]
      randomNumbers = new Random(); // cria gerador de número aleatório

      // preenche baralho com objetos Card
      for ( int count = 0; count < deck.length; count++ )        
         deck[ count ] =                                         
            new Card( faces[ count % 13 ], suits[ count / 13 ] );
   } // fim do construtor DeckOfCards

   // embaralha as cartas com um algoritmo de uma passagem
   public void shuffle()
   {
      // depois de embaralhar, a distribuição deve iniciar em deck[ 0 ] novamente
      currentCard = 0; // reinicializa currentCard

      // para cada Card, seleciona outro Card aleatório e os compara
      for ( int first = 0; first < deck.length; first++ )
      {
         // seleciona um número aleatório entre 0 e 51
         int second =  randomNumbers.nextInt( NUMBER_OF_CARDS );

         // compara Card atual com Card aleatoriamente selecionado
         Card temp = deck[ first ];     
         deck[ first ] = deck[ second ];
         deck[ second ] = temp;         
      } // for final
   } // fim do método shuffle

   // distribui um Card
   public Card dealCard()
   {
      // determina se ainda há Cards a serem distribuídos
      if (currentCard < deck.length)
         return deck[ currentCard++ ]; // retorna Card atual no array
      else        
         return null; // retorna nulo p/ indicar que todos os Cards foram distribuídos
   } // fim do método dealCard
} // fim da classe DeckOfCards

5 Respostas

Mantu

Tá certo! No caso, o tipo do array sendo declarado é Card. É um array do tipo Card. Sacou?

marcushlm

a declaração está correta.
é um array de objetos da classe Card
da mesma forma que poderia ser de qualquer outro tipo…

rodrigo_gomes

Só pra complementar, você pode declarar um array colocando os “[]” em qualquer lugar.

Exemplo:

Card    deck[];
Card[]  deck;
Card    []deck;

[]´s

edymrex

Valew galera isso eu entendi mais ainda tem um erro nesse exemplo irei mostrar a vcs primeiramente colocarei todas as classes do programa

Classe Card:

// Classe Card representa uma carta de baralho.

public class Card 
{
   private String face; // face da carta ("Ace", "Deuce", ...)
   private String suit; // naipe da carta ("Hearts", "Diamonds", ...)

   // construtor de dois argumentos inicializa face e naipe da carta
   public Card( String cardFace, String cardSuit )
   {
      face = cardFace; // inicializa face da carta
      suit = cardSuit; // inicializa naipe da carta
   } // fim do construtor Card de dois argumentos

   // retorna representação String de Card
   public String toString()               
   {                                      
      return face + " of " + suit;        
   } // fim do método toString
} // fim da classe Card

Classe DeckOfCards

import java.util.Random;

public class DeckOfCards
{
   private Card deck[]; // array de objetos Card
   private int currentCard; // índice do próximo Card a ser distribuído
   private final int NUMBER_OF_CARDS = 52; // número constante de Cards
   private Random randomNumbers; // gerador de número aleatório

   // construtor preenche baralho de cartas
   public DeckOfCards()
   {
      String faces[] = { "Ace", "Deuce", "Three", "Four", "Five", "Six",
         "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };    
      String suits[] = { "Hearts", "Diamonds", "Clubs", "Spades" };     

      deck = new Card[ NUMBER_OF_CARDS ]; // cria array de objetos Card
      currentCard = 0; // configura currentCard então o primeiro Card distribuído é deck[ 0 ]
      randomNumbers = new Random(); // cria gerador de número aleatório

      // preenche baralho com objetos Card
      for ( int count = 0; count < deck.length; count++ )        
         deck[ count ] =                                         
            new Card( faces[ count % 13 ], suits[ count / 13 ] );
   } // fim do construtor DeckOfCards

   // embaralha as cartas com um algoritmo de uma passagem
   public void shuffle()
   {
      // depois de embaralhar, a distribuição deve iniciar em deck[ 0 ] novamente
      currentCard = 0; // reinicializa currentCard

      // para cada Card, seleciona outro Card aleatório e os compara
      for ( int first = 0; first < deck.length; first++ )
      {
         // seleciona um número aleatório entre 0 e 51
         int second =  randomNumbers.nextInt( NUMBER_OF_CARDS );

         // compara Card atual com Card aleatoriamente selecionado
         Card temp = deck[ first ];     
         deck[ first ] = deck[ second ];
         deck[ second ] = temp;         
      } // for final
   } // fim do método shuffle

   // distribui um Card
   public Card dealCard()
   {
      // determina se ainda há Cards a serem distribuídos
      if (currentCard < deck.length)
         return deck[ currentCard++ ]; // retorna Card atual no array
      else        
         return null; // retorna nulo p/ indicar que todos os Cards foram distribuídos
   } // fim do método dealCard
} // fim da classe DeckOfCards

Classe DeckOfCardsTest

public class DeckOfCardsTest
{
   // executa o aplicativo
   public static void main( String args[] )
   {
      DeckOfCards myDeckOfCards = new DeckOfCards();
      myDeckOfCards.shuffle(); // coloca Cards em ordem aleatória
      
      // imprime todas as 52 cartas na ordem em que elas são distribuídas
      for ( int i = 0; i < 13; i++ )
      {
         // distribui e imprime 4 Cards
         System.out.printf( "%-20s%-20s%-20s%-20s\n",
            myDeckOfCards.dealCard(), myDeckOfCards.dealCard(), 
            myDeckOfCards.dealCard(), myDeckOfCards.dealCard() );
      } // for final
   } // fim de main
} // fim da classe DeckOfCardsTest

Ele cria um construtor na classe Card

public Card( String cardFace, String cardSuit )
   {
      face = cardFace; // inicializa face da carta
      suit = cardSuit; // inicializa naipe da carta
   } // fim do construtor Card de dois argumentos

Ele passa duas Strings como parâmetros mais não entedi…!! de onde ele está pegandu esses parâmetros e passando para o construtor…??
o certo não seria assim…??
Card chama = new Card("“Ace”, “Deuce”);//passando duas Strings como parâmetros;

Mantu

Dê uma lida neste artigo. Vai te fazer entender o porque que isso aí no Deitel tá certo
http://www.javaranch.com/campfire/StoryCups.jsp

Criado 15 de janeiro de 2007
Ultima resposta 15 de jan. de 2007
Respostas 5
Participantes 4