0

I have been working on an Uno game for my intro to Java class. The deck is fully functional and all code compiles. I get a runtime StackOverflowError on many many lines. When making a new Player or Game object, I get these errors.

Thanks again for the help!

public class Game
{
private Player player1;
private Player player2;
private Player player3;
private Deck thisDeck;
private Card currentCard;

public Game()
{
    player1 = new Player(1,0);
    player2 = new Player(2,1);
    player3 = new Player(3,1);
    thisDeck = new Deck();
    currentCard = null;
    startGame();
}

public void startGame()
{
    setCurrentCard(thisDeck.drawRandomCard());
    System.out.println("The game has been started by drawing a random card and setting it as the current card");
    currentCard.print();
}

public void setCurrentCard(Card newCurrentCard)
{
    currentCard = newCurrentCard;
    System.out.println("The current card has been changed");
}    

public Player getPlayer1()
{
    return player1;
}

public Player getPlayer2()
{
    return player2;
}

public Player getPlayer3()
{
    return player3;
}

public Card getCurrentCard()
{
    return currentCard;
}

}

import java.util.ArrayList;

public class Player
{
private int playerID;
private int playerType; //0 is human, 1 is computer
private Deck thisDeck;
private Game thisGame;
private ArrayList<Card> hand;
private ArrayList<Card> handToPlay;

public Player(int pPlayerID, int pPlayerType)
{
    playerID = pPlayerID;
    playerType = pPlayerType;
    thisDeck = new Deck();
    thisGame = new Game();
    hand = new ArrayList<Card>();
    handToPlay = new ArrayList<Card>();
}

public void dealtAHand()
{
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
    hand.add(thisDeck.drawRandomCard());
}

public void createHandToPlay()
{
    Card currentCard = thisGame.getCurrentCard();
    for(Card thisCard: hand)
    {
        if(thisCard.getColor().equals(currentCard.getColor()) || thisCard.getValue()== currentCard.getValue())
        {
            handToPlay.add(thisCard); 
            System.out.println("A card has been added to Hand To Play");
        }
        if(thisCard.getValue()==13 || thisCard.getValue()==14)
        {
            handToPlay.add(thisCard);
            System.out.println("A wild card has been added to Hand To Play");
        }
    }
    for(Card thisCard: handToPlay)
    {
        thisCard.print();
    }
}

public void takeAComputerTurn()
{
    createHandToPlay();
    if(handToPlay.isEmpty())
    {
        drawACard();
    }
    else
    {
        playACard();
    }
}

public void takeAHumanTurn()
{
    createHandToPlay();
    if(handToPlay.isEmpty())
    {
        drawACard();
        System.out.println("As you had no cards to play in your hand, you have drawn a card");
    }
    else
    {
        System.out.println("Based on these available choices, which card would you like to play?");
    }

}

public void playACard()
{
    //int randomIndex = randomGenerator.nextInt(handToPlay.size());
    //Card cardToPlay = handToPlay.get(randomIndex);  
    //System.out.println("The card to play has been randomly chosen");
    Card cardToPlay = handToPlay.get(0); 
    System.out.println("The card to play has been chosen (first card in the ArrayList)");
    thisGame.setCurrentCard(cardToPlay);
    thisGame.getCurrentCard().print();
    handToPlay.clear();
}

public void drawACard()
{
    hand.add(thisDeck.drawRandomCard());
}

public int getPlayerType()
{
    return playerType;
}
}

import java.util.ArrayList;
import java.util.Random;

public class Deck
{
private Card thisCard;
private ArrayList<Card> deck;
private ArrayList<String> colors;
private ArrayList<Integer> values;
private Random randomGenerator;

public Deck()
{
    deck = new ArrayList<Card>();
    randomGenerator = new Random();
    initalizeColors();
    initalizeValues();
    createDeck();
}

private void initalizeColors()
{
    colors = new ArrayList<String>();
    colors.add("Red");
    colors.add("Yellow");
    colors.add("Green");
    colors.add("Blue");        
}    

private void initalizeValues()
{
    values = new ArrayList<Integer>();
    values.add(0);
    values.add(1);
    values.add(2);
    values.add(3);
    values.add(4);
    values.add(5);
    values.add(6);
    values.add(7);
    values.add(8);
    values.add(9);
    values.add(10);
    values.add(11);
    values.add(12);
    values.add(13);
    values.add(14);        
}

public void createDeck()
{
    for(int thisValue:values)
    {
        if(thisValue==0)
        {
            for(String thisColor:colors)
            {
                thisCard = new Card(thisColor,thisValue);
                deck.add(thisCard);               
            }
        }

        if(thisValue>=1 && thisValue<=9)
        {
            for(String thisColor:colors)
            {
                thisCard = new Card(thisColor,thisValue);
                deck.add(thisCard);         
                thisCard = new Card(thisColor,thisValue);
                deck.add(thisCard); 
            }
        }

        if(thisValue>=10 && thisValue<=12)
        {
            for(String thisColor:colors)
            {
                thisCard = new ActionCard(thisColor,thisValue);
                deck.add(thisCard);  
                thisCard = new ActionCard(thisColor,thisValue);
                deck.add(thisCard); 
            }
        }

        if(thisValue==13)
        {
            for(String thisColor:colors)
            {
                thisCard = new WildCard(null,thisValue);
                deck.add(thisCard);               
            }
        }

        if(thisValue==14)
        {
            for(String thisColor:colors)
            {
                thisCard = new WildActionCard(null,thisValue);
                deck.add(thisCard);               
            }
        }
    }
}

public Card drawCardByIndex(int index)
{
    thisCard = deck.get(index);
    deck.remove(index);
    return thisCard;
}  

public Card drawRandomCard()
{
    int randomIndex = randomGenerator.nextInt(deck.size());
    thisCard = drawCardByIndex(randomIndex);
    return thisCard;
}    

public void printDeckInfo()
{
    for(Card thisCard:deck)
    {
        thisCard.print();
    }
}
}

Here are the errors I receive in the terminal (abbreviated to fit character limit):

java.lang.StackOverflowError
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
at Deck.initalizeColors(Deck.java:24)
at Deck.<init>(Deck.java:16)
at Player.<init>(Player.java:16)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
at Player.<init>(Player.java:17)
at Game.<init>(Game.java:12)
8
  • 1
    Could you post your main method (and also the error stack trace)? Commented Nov 16, 2015 at 1:20
  • We use an IDE that hides the main method (BlueJ), and I'm not sure how to find it, but here are the errors. Thank you! Commented Nov 16, 2015 at 1:23
  • At least you have a circular reference in the constructors of Game and Player. When you create a new Game, it creates a new Player, which creates a new Game, which creates a new Player.. Commented Nov 16, 2015 at 1:24
  • I figured that was the issue, but wasn't sure how to navigate it because the player needs to know the current card (available in game) to match the card to play with the cards in their hand. Any ideas on how to clear this up would be very helpful. Thanks! Commented Nov 16, 2015 at 1:30
  • Instead of creating the Game in the constructor of Player, you could have a method for registering the player into a game (Player#register(Game game)). On the other hand, it might be enough that only the Game knows each Player involved (and players are ignorant of the game they're in). As the game advances, Game would then "push" relevant information to each player through dealtAHand (e.g. Player#dealtAHand(Card currentCard)). Using the latter approach, you could remove the Game reference (and with some more refactoring, also the Deck reference) from Player. Commented Nov 16, 2015 at 1:41

1 Answer 1

0

This answer is incomplete because the code is generally in a mess, and almost certainly has other problems. That being said, the cause of the StackOverflowError is that your Game constructor creates a Player object, and your Player constructor creates a Game object. This error might slip past compilation, but once you run this code it will blow up.

public Game() {
    player1 = new Player(1,0);   // create a new Player
    player2 = new Player(2,1);
    player3 = new Player(3,1);
    thisDeck = new Deck();
    currentCard = null;
    startGame();
}

public Player(int pPlayerID, int pPlayerType) {
    playerID = pPlayerID;
    playerType = pPlayerType;
    thisDeck = new Deck();
    thisGame = new Game();           // create a new Game (really??)
    hand = new ArrayList<Card>();
    handToPlay = new ArrayList<Card>();
}
Sign up to request clarification or add additional context in comments.

3 Comments

I should have looked online to begin with, as I had no idea where to start with structure. The reason Player creates a game is because player needs to know the current card to match it with the cards in their hand. Any help you have in fixing this issue would be greatly appreciated.
I would need to debug and run your code in an actual IDE to get the whole thing running.
It's at its very beginning stages but I was at least able to get rid of the stack overflow error by not initiating a new game in Player, just declaring it. Thank you. I have a long way to go but this was a good step.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.