検索カードを入力し、検索カードの値(色とランク)を手の現在のカードと比較して、 "カードの手"(キュー)を検索しようとしています。一致するカードが出力され、現在のプレイヤーの「気分」が変更された場合に表示されます。一致するものが見つからず、ハンド全体が検索されていない場合、現在のカードはデキューされ、手の後ろにエンキューされ、メソッドが再び実行されます。手全体が検索された場合(手の最初のカードに戻る)、「ダミーカード」が返されます。 私の問題は、一致するカードが見つからない場合、StackOverflowErrorが表示されることです。私はこれがどこから来ているのか分かりませんが、カードのエンキュー/デキューとメソッドの再帰(最後に向かって)と関係があると思います。誰かが助けることができれば、私はそれを感謝します。より多くのコードや情報が必要な場合は、尋ねてください。スタック検索でスタックオーバーフローが発生する
NEW CODE:
(at top of class)
int counter = 1;
....
/**
* Method that checks a player's hand for matching cards
* @param searchCard card to search for in player's hand
* @return card in player's hand if found, dummy card otherwise
*/
public UnoCard getMatch(UnoCard searchCard) {
UnoCard foundCard;
UnoCard currentCard = cards.first();
UnoCard noCard = new UnoCard('N', 0);
//check if colours of cards match
if (currentCard.getColour() == searchCard.getColour()) {
//set mood, remove card from hand, and return matching card
setMood("Colour");
foundCard = currentCard;
cards.dequeue();
return foundCard;
//check if ranks of cards match
} else if (currentCard.getRank() == searchCard.getRank()) {
//set mood, remove card from hand, and return matching card
setMood("Rank");
foundCard = currentCard;
cards.dequeue();
return foundCard;
//if no match is found
} else {
//check if end of hand has been reached
if (counter == cards.size()) {
//set mood and return dummy card
setMood("No match");
counter = 1;
return noCard;
} else {
//place card at back of hand and search again with next card in hand
counter++;
System.out.println("Counter is: " + counter);
cards.dequeue();
cards.enqueue(currentCard);
return getMatch(searchCard);
}
}
}
を 'counter'ではなく、メソッド、変数のメソッドパラメータであってはならないことをあなたは確かにいますか? –
リスト(または順序が関係ない場合はセット)を使用し、その 'contains()'および 'remove()'メソッドを使用しないのはなぜですか? –
'counter'は、メソッドが現在どのカードを手にしているかの表現として使用されます。メソッドが実行されると、1に初期化されます(最初のカードの場合)。メソッドが呼び出されるたびに同じ方法で開始する必要があるため、パラメータでなければならないとは思いません。リストを使用することはできません。申し訳ありません。 – lollercopter