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

标签 java exception methods io

在 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/

相关文章:

iOS 从另一个 View 跳过方法调用

javascript - 在 IE8 中恢复被覆盖的 JavaScript 方法

Java EE - 查找 session 大小

java - TestNG 中的并行执行

java - 使用字符串作为参数对 ArrayList 进行线性搜索

Java try/catch args[0] 未找到

java - 在大型 map/reduce 应用程序中管理计数器

r - 使用 R 中的条件对象将 `immediate.` 设置为 `TRUE`?

c# - 具有动态参数的整数类型预期开关的值

swift - swift中的方法,将在用户从后台打开应用程序后执行