CluelessCollegeStuden
CluelessCollegeStuden

Reputation: 37

Convert ArrayList<Object> to string

Hi i am trying to practice java and am just getting started! To practice i am attempting to build a simple poker game but have gotten stuck with the Array List of cards. I am trying to print it out but only the address is output to the console, naturally i have tried to use the .toString method and create my own toString method to try and check if the array list is inputted correctly. Bellow is my Card class with an Arraylist{Card}Deck. Bellow is my Code

package poker;

import java.util.ArrayList;

public class Card {
    private String _suit;
    private int _cardNum;

    public Card(int cardNum, String suit) {
        _suit = suit;
        _cardNum = cardNum;
    }
    public String toString() {
        return _suit +_cardNum;
    }

    static ArrayList<`enter code here`Card> Deck = new ArrayList<Card>() {{
        add(new Card(0,"Hearts"));
        add(new Card(1,"Hearts"));
        add(new Card(1,"Hearts"));
        add(new Card(2,"Hearts"));
        add(new Card(3,"Hearts"));
        add(new Card(4,"Hearts"));
        add(new Card(5,"Hearts"));
        add(new Card(6,"Hearts"));
        add(new Card(7,"Hearts"));
        add(new Card(8,"Hearts"));
        add(new Card(9,"Hearts"));
        add(new Card(10,"Hearts"));
        add(new Card(11,"Hearts"));
        add(new Card(12,"Hearts"));
        add(new Card(13,"Hearts"));
        add(new Card(0,"Spades"));
        add(new Card(1,"Spades"));
        add(new Card(2,"Spades"));
        add(new Card(3,"Spades"));
        add(new Card(4,"Spades"));
        add(new Card(5,"Spades"));
        add(new Card(6,"Spades"));
        add(new Card(7,"Spades"));
        add(new Card(8,"Spades"));
        add(new Card(9,"Spades"));
        add(new Card(10,"Spades"));
        add(new Card(11,"Spades"));
        add(new Card(12,"Spades"));
        add(new Card(13,"Spades"));
        add(new Card(0,"Clubs"));
        add(new Card(1,"Clubs"));
        add(new Card(2,"Clubs"));
        add(new Card(3,"Clubs"));
        add(new Card(4,"Clubs"));
        add(new Card(5,"Clubs"));
        add(new Card(6,"Clubs"));
        add(new Card(7,"Clubs"));
        add(new Card(8,"Clubs"));
        add(new Card(9,"Clubs"));
        add(new Card(10,"Clubs"));
        add(new Card(11,"Clubs"));
        add(new Card(12,"Clubs"));
        add(new Card(13,"Clubs"));
        add(new Card(0,"Diamonds"));
        add(new Card(1,"Diamonds"));
        add(new Card(2,"Diamonds"));
        add(new Card(3,"Diamonds"));
        add(new Card(4,"Diamonds"));
        add(new Card(5,"Diamonds"));
        add(new Card(6,"Diamonds"));
        add(new Card(7,"Diamonds"));
        add(new Card(8,"Diamonds"));
        add(new Card(9,"Diamonds"));
        add(new Card(10,"Diamonds"));
        add(new Card(11,"Diamonds"));
        add(new Card(12,"Diamonds"));
        add(new Card(13,"Diamonds"));
    }};
}

and my MainApp

package poker;

import java.util.Random;
import static java.lang.System.out;

public class MainApp {

    public static void main(String[] args) {
        for(int i = 0;i <Card.Deck.size();i++) {
            out.println(Card.toString());

        }
    }
}

In the print line is where my problem occurs. How do i convert the arraylist from the class type to a string for outputting? Thanks in advance!

Upvotes: 0

Views: 446

Answers (4)

NothingBox
NothingBox

Reputation: 403

Your Card.toString() is not referencing to a Card in Deck object. What you want to do is print the string value of the Card from the Deck Object. If you are using Java 8, you can use below code:

Card.Deck.forEach(card -> System.out.println(card.toString()));

Upvotes: 0

Kenneth S
Kenneth S

Reputation: 66

What is the error you are seeing?

The biggest problem I am seeing is that your for-loop is not using the index to dereference the members of your Deck array:

for(int i = 0;i <Card.Deck.size();i++) {
            out.println(Card.toString());

        }

Card is a class - not an object. You have created a bunch of object of the Card class, but that is not what you are referencing in that code. To reference the object instances instead of the class, do this: You should replace Card.toString() with: Card.Deck.get(i).toString() -- but there is a better way to do this, see below.

As an aside, You should probably use the @Override attribute for your implementation of toString. It probably isn't strictly necessary but makes it clear that you are overriding the default implementation:

    @Override
    public String toString() {
        return _suit +_cardNum;
    }

As I mentioned above, there is an easier way to print each card in the deck: use the iterator shortcut for instead of trying to treat the arraylist like an array:

    public void printDeck() {
        for(Card card : Card.Deck) {
            out.print(card.toString());
        }
    }

Upvotes: 0

Sam
Sam

Reputation: 153

Can you try the below it should print all the String contents of the ArrayList.

System.out.println(Card.Deck); 

Something like

[Hearts0, Hearts1, Hearts1, Hearts2, Hearts3, Hearts4, Hearts5, Hearts6, Hearts7, Hearts8, Hearts9, Hearts10, Hearts11, Hearts12, Hearts13, Spades0, Spades1, Spades2, Spades3, Spades4, Spades5, Spades6, Spades7, Spades8, Spades9, Spades10, Spades11, Spades12, Spades13, Clubs0, Clubs1, Clubs2, Clubs3, Clubs4, Clubs5, Clubs6, Clubs7, Clubs8, Clubs9, Clubs10, Clubs11, Clubs12, Clubs13, Diamonds0, Diamonds1, Diamonds2, Diamonds3, Diamonds4, Diamonds5, Diamonds6, Diamonds7, Diamonds8, Diamonds9, Diamonds10, Diamonds11, Diamonds12, Diamonds13]

Upvotes: 0

abewieland
abewieland

Reputation: 59

Since toString() is not a static method, you need to call it on an instance of a class. So, change the line out.println(Card.toString()); to out.println(Card.Deck.get(i).toString()); in your MainApp.

On a side note, I notice you have 14 cards per suit, which I assume is unintentional.

Upvotes: 1

Related Questions