【发布时间】:2023-04-03 00:16:02
【问题描述】:
背景:我的任务是编写一个程序,该程序使用链表来跟踪纸牌游戏(战争)中的纸牌。所以我写了4个程序:card.java、deckofcards.java、hand.java、war.java(driver)。卡包含基本信息。添加到卡片的链接列表时,我使用了一个名为 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;
}
因此,deckofcards 随机生成 52 个(无论如何应该是,但那是一个不同的问题)有序卡片,然后将它们交给 war.java 中的 hand.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 线程“主”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) //重复1000次...
当然,我只提供了我认为导致问题的代码的 sn-p,我可以根据要求提供整个代码。
【问题讨论】:
标签: stack stack-overflow