исключение java stackOverFlowError, созданное 1000 раз - PullRequest
0 голосов
/ 24 октября 2011

Предыстория: моим заданием было написать программу, которая использует связанный список для отслеживания карт в карточной игре (война).Итак, я написал 4 программы: card.java, deckofcards.java, hand.java, war.java (драйвер).карта содержит основную информацию.При добавлении в связанный список карт я использую метод setLast:

nextCard=null;
public card(String a, String b)
{
    hand=a;
    suit=b;
}
public void setLast(card c)
{
    if(nextCard==null)
    {
         nextCard = c;
    }
    else
    {
         nextCard.setLast(c);
    }
}

, затем в deckofcards.java:

    card deck, dealt;
    public deckofcards()
{
    rand = new Random();
    dealt = new card("0","0"); //null card place holders
    first = new card("0","0");
    numcards = 52;
    shuffle();
}
    public card dealCard()
{
    card c=new card("0","0");
    if(first!= null)
    {
        c = first;
        first = first.nextCard;
        c.nextCard = null;
        if(dealt.toString().compareTo("00")==0)
        {
            dealt = c;
        }
        else
        {
            dealt.setLast(c);
        }
        numcards--;
    }
    else
    {
        System.out.println("Deck: ran out of cards");
    }
    return c;
}

, поэтому колода карт генерирует 52 случайным образом (предполагается, что в любом случае,но это другой вопрос) заказанные карты и руки раздают их экземплярам hand.java в war.java

hand.java:

    card cards;
    int numcards;
    public void getCard(card c)
{
    System.out.println("In hand.java,getCard");
    if (numcards==0)
    {
        cards = c;
        numcards++;
    }
    else
    {
        cards.setLast(c);
    }
}

и war.java:

    players = new hand[numplayers];
    for(int i=0;i<numplayers;i++)
{
    players[i] = new hand();
}
deck = new deckofcards();
int i=0;
while(i<52)
{
    int ii=0;
    if((ii<numplayers)&&(i<52))
    {
        players[ii].getCard(deck.dealCard());
        i++;
        ii++;
    }
    else
    {
        ii=0;
    }
}

вывод: в hand.java, getCard В hand.java, исключение getCard в потоке "main" java.lang.StackOverflowError в card.setLast (card.java:125) в card.setLast (card.java:125) на card.setLast (card.java:125) на card.setLast (card.java:125) на card.setLast (card.java:125) на card.setLast (card.java:125) на card.setLast(card.java:125) // повторяется тысячи раз ...

Конечно, я предоставил только фрагмент кода, который, по моему мнению, вызывает проблему, я могу предоставить весь код по запросу.

1 Ответ

0 голосов
/ 24 октября 2011

Ваш список где-то имеет цикл, то есть "A-> B-> C-> D-> B". Есть ли причина, по которой вы используете «пустые заполнители карты» вместо значения «ноль»? Я заметил, что setLast проверяет значение 'null' вместо '00' для вашего нулевого заполнителя, но, не видя весь код, трудно сказать, где ваш список получает цикл.

...