Creating an instance of an array of objects class in Java

13,037

Solution 1

You need to call the constructor:

DeckofCards myDeck = new DeckofCards(); // note parens!

In Java, the parentheses are required.

In the constructor, you will also need to initialize each element of the array to a new Card object:

for(int s = 1; s<5; s++){
    for(int r = 1; r<14; r++){
        deck[i] = new Card();
        deck[i].rank = r;
        deck[i].suit = s;
        i++;

Solution 2

Replace

DeckofCards myDeck = new DeckofCards;

with

DeckofCards myDeck = new DeckofCards();

and myDeck was never initialized to be an array.

Solution 3

The error is pretty clear, myDeck is a single custom Object rather than an array

DeckofCards myDeck = new DeckofCards();  // parenthesis here
for (int i=0; i<53; i++) {
    System.out.println(myDeck); // no brackets here
}

Although the loop itself should be located within the toString method of the DeckofCards class.

Solution 4

In order to iterate through the DeckofCards you'll want to expose that private Card[] array. You can use the bean notation getCards() or just make the array public.

    public class DeckofCards {

        private Card[] deck = new Card[52];

        public DeckofCards(){
            int i = 0;

                for(int s = 1; s<5; s++){
                    for(int r = 1; r<14; r++){
                deck[i].rank = r;
                deck[i].suit = s;
                i++;

        }
      } 
    }
     public Card[] getCards(){

          return deck;

     }
   }

I would probably just make the deck public.

Share:
13,037
singmotor
Author by

singmotor

Updated on June 05, 2022

Comments

  • singmotor
    singmotor almost 2 years

    I'm new to Java, and I'm getting an error in my main function when I try to create an instance of a DeckofCards class. The DeckofCards class is supposed to be a private array of "Cards" objects. I think my issue is something in the DeckofCards class, for some reason it's not an array I think? Maybe I created it wrong?

    The errors in my main are '(' or '[' expected and array required but DeckofCards found

    Here is my main function:

    public static void main(String[] args) {
    
            Card myCard = new Card(13,1);
            System.out.println(myCard.getSuit());
            System.out.println(myCard);
            DeckofCards myDeck = new DeckofCards;  //error here
            for(int i=0; i<53; i++) {
                System.out.println(myDeck[i]); //second error here
            }
        }
    

    Here is my DeckofCards class:

    public class DeckofCards {
    
        private Card[] deck = new Card[52];
    
        public DeckofCards(){
            int i = 0;
    
                for(int s = 1; s<5; s++){
                    for(int r = 1; r<14; r++){
                deck[i].rank = r;
                deck[i].suit = s;
                i++;
    
        }
    }
        }
    }
    

    If anyone can tell me if I'm missing some syntax or something that'd be great! Thank you.

  • singmotor
    singmotor about 10 years
    Thanks Ted! Can you also explain why System.out.println(myDeck[i]) returns an error? println(myCard) prints out the card value ('Four of Clubs") so shouldn't that last for loop print out the values of all the cards?
  • Ted Hopp
    Ted Hopp about 10 years
    @Acoustic77 - The variable myDeck is not an array, so you can't access parts of it using array subscripting. If you want to print the i-th card in the deck, you'll need a getter method in DeckofCards (for instance: public Card getCard(int i) { return deck[i]; }). Then you could try System.out.println(myDeck.get(i));.