背景:我的任務是編寫一個程序,使用鏈表來跟蹤紙牌遊戲(戰爭)中的紙牌。所以我寫了4個程序:card.java,deckofcards.java,hand.java,war.java(驅動程序)。卡持有基本信息。當添加到我使用的方法叫做setLast卡鏈表:java stackOverFlowError異常拋出1000次
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隨機(應該無論如何,但是那一個不同問題)訂購卡和手他們涉及到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;
}
}
輸出:在card.setLast(卡 在hand.java,getCard 在hand.java,getCard 異常在線程 「主」 java.lang.StackOverflowError的 。的java:125) 在card.setLast(card.java:125) 在card.setLast(card.java:125) 在card.setLast(card.java:125) 在card.setLast(card.java: 125) at card.setLast(card.java:125) at card.setLast(card.java:125) //重複1000次...
當然,我只提供了我認爲會導致問題的代碼段,我可以根據請求提供整個代碼。
我做了一張空卡,因爲我還添加了一個搜索功能卡功能,我認爲這將是一個很好的解決辦法。另外我不確定如何寫「公用卡dealcard()」。我不想寫一個方法拋出一個......我將不得不讓它拋出一個異常不是我嗎? –