배경 : 내 과제는 카드 게임 (전쟁)에서 카드를 추적하기 위해 연결된 목록을 사용하는 프로그램을 작성하는 것이 었습니다. 그래서 저는 card.java, deckofcards.java, hand.java, war.java (driver)의 4 가지 프로그램을 작성했습니다. 카드에는 기본 정보가 들어 있습니다.java stackOverFlowError 예외가 1000 번 throw되었습니다.
다음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에 : 나는 방법이라고 setLast 사용하는 카드의 연결 목록에 추가 할 때
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)를 생성을 (어쨌든에 생각하지만, 그게 전부 다른를
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
hand.java에 hand.java의 인스턴스로 거래 주문 691,363,210
및 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 (카드의 스레드 "메인"java.lang.StackOverflowError의 에 hand.java에서 , hand.java에서 getCard , getCard 예외. java : 125) at card.setLast (card.java:125) at card.setLast (card.java:125) at card.setLast (card.java:125) at card.setLast (card.java:125) 125) at card.setLast (card.java:125) at card.setLast (card.java:125) // 번 1000 번 반복 ...
물론 코드의 일부만 제공했기 때문에 문제가 발생하면 요청시 전체 코드를 제공 할 수 있습니다.
나는 카드에 검색 기능을 추가했기 때문에 널 (null) 카드를 사용했기 때문에 좋은 해결책이 될 것이라고 생각했다. 게다가 나는 "공중 카드 거래 카드 (public card dealcard)"를 쓰는 방법을 확신하지 못했습니다. 나는 던지는 메서드를 작성하고 싶지 않았습니다 ... 예외를 던질 수 있도록해야할까요? –