gpt4 book ai didi

java - 无法找到我的 Java 纸牌游戏的 hasNext() 和 next() 方法的符号

转载 作者:行者123 更新时间:2023-12-01 19:32:33 28 4
gpt4 key购买 nike

在 hasNext() 和 next() 方法下有一条红色下划线。它给出的错误是:

cannot find symbol

symbol: method hasNext()

location: variable deck of type Deck

它显示了 next() 方法的相同错误。我尝试通过在 House 构造函数中添加 deck = new Deck(); 来创建一个新的 Deck 对象,但它给了我错误:

unreported exception IOException; must be caught or declared to be thrown

我用谷歌搜索了这意味着什么,并读到也许我需要一个 try catch block ,但我不太明白为什么。

public class House
{
private double currentBet; // Player's current bet
private double pot; // Amount of the pot in play
private Card firstCard; // First card to be dealt
private Card secondCard; // Second card to be dealt
private Card thirdCard; // Third card to be dealt
private Deck deck; // The card deck to be used
private DeckIterator deckIterator; // The card deck to be used

/**
* Private helper method that returns the next card in the deck.
* If the end of the deck is reached, it shuffles the deck and
* returns the first card off the deck.
* @return Card card;
*/
private Card dealCard()
{
if(!deck.hasNext())
{
deck.shuffle();
}
return deck.next();
}

这是 Deck 类的一个片段。这是另一位团队成员写的:

public class Deck {
private Card[] deck;
private int currentCard; //index of next card to be dealt
private int remainingCards;
private BufferedImage tempCardImage;


/**
* Constructor to build a deck of cards
*/
public Deck () throws IOException
{
String[] Faces = {"2", "3", "4", "5", "6", "7",
"8", "9", "10", "Jack", "Queen",
"King", "Ace"};
String[] Suits = {"Diamonds", "Clubs", "Hearts", "Spades"};

deck = new Card[52];
currentCard = 0;

~~~irrelevant code here~~~
}

public Iterator<Card> iterator(){
return new DeckIterator( this );
}

public class DeckIterator implements Iterator<Card> {
private Deck d;
private int pos;
DeckIterator( Deck d ){
this.d = d;
}

@Override
public boolean hasNext(){
return pos < d.deck.length;
}

@Override
public Card next(){
if( pos >= d.deck.length ){
throw new NoSuchElementException( "No more cards in deck" );
}
return d.getCard( pos++ );
}

@Override
public void remove() {
throw new UnsupportedOperationException("Not supported yet."); }
}
}

这是我根据你们提出的建议修改的代码:

public class House
{
private double currentBet; // Player's current bet
private double pot; // Amount of the pot in play
private Card firstCard; // First card to be dealt
private Card secondCard; // Second card to be dealt
private Card thirdCard; // Third card to be dealt
private Deck deck; // The card deck to be used

DeckIterator deckIterator = deck.iterator();

/**
* Constructor that receives that amount of the buy in and sets the pot.
* @param buyIn
*/
public House(double buyIn)
{
pot = buyIn;
}

/**
* Private helper method that returns the next card in the deck.
* If the end of the deck is reached, it shuffles the deck and
* returns the first card off the deck.
* @return Card card;
*/
private Card dealCard()
{
if(!deckIterator.hasNext())
{
deck.shuffle();
}
try
{
deckIterator.next();
}
catch (NoSuchElementException e)
{
System.out.println(e);
}
return deckIterator.next();
}

最佳答案

您收到该异常是因为在 next() 中您抛出了新的 NoSuchElementException。当您使用 next() 时,例如在 dealCard() 中,您需要处理确实抛出此异常的情况。

因此,您需要将 deck.next() 放入 try-catch block 中。

try {
return deck.next()
} catch (NoSuchElementException e) {
System.out.println(e.printStackTrace());
// Do something here
}

关于java - 无法找到我的 Java 纸牌游戏的 hasNext() 和 next() 方法的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com