错误:未报告的异常IllegalMoveException;必须被抓住或宣布被抛出

时间:2017-02-15 17:36:35

标签: java

不知道我做错了什么。如果我能得到一些很棒的帮助。这是错误的类:

final String ANSI_CLS = "\u001b[2J";
System.out.print(ANSI_CLS);

错误在play()方法中,特别是在具有相同错误的这两行上:

import java.util.Scanner;

/** The solitaire card game Idiot's Delight. */  
public class IdiotsDelight {

    /** For reading from the console. */  
    public static final Scanner INPUT = new Scanner(System.in);

    /** The four Stacks of Cards. */  
    private Stack<Card>[] stacks;

    /** The Deck of Cards. */  
    private Deck deck;

    /** Create and shuffle the Deck. Deal one Card to each Stack. */  
    public IdiotsDelight() {  
        deck = new Deck();  
        deck.shuffle();  
        stacks = new Stack[4]; // This causes a compiler warning  
        for (int i = 0; i < 4; i++) {  
            stacks[i] = new ArrayStack<Card>();   
        }  
        deal();  
    }

    /** Deal one Card from the Deck onto each Stack. */  
    public void deal() {  
        for (Stack<Card> s : stacks) {  
            s.push(deck.deal());  
        }  
    }

    /** Play the game. */  
    public void play() {  
        while (true) {  
        // Print game state  
            System.out.println("\n" + this);  
            // Check for victory  
            boolean done = true;  
            for (Stack<Card> s : stacks) {  
                if (!(s.isEmpty())) {  
                    done = false;  
                    break;  
                }  
            }  
            if (done) {  
                System.out.println("You win!");  
                return;  
            }  
            // Get command  
            System.out.print("Your command (pair, suit, deal, or quit)? ");  
            String command = INPUT.nextLine();  
            // Handle command  
            if (command.equals("pair")) {  
                removePair();  
            } else if (command.equals("suit")) {  
                removeLowCard();  
            } else if (command.equals("deal")) {  
                deal();  
            } else {  
                return;  
            }  
        }  
    }

    /**  
    * Remove the lower of two Cards of the same suit, as specified by  
    * the user.  
    */  
    public void removeLowCard() throws IllegalMoveException {  
        System.out.print("Location (1-4) of low card? ");  
        int i = INPUT.nextInt();  
        System.out.print("Location (1-4) of high card? ");  
        int j = INPUT.nextInt();  
        INPUT.nextLine(); // To clear out input  
        stacks[i - 1].pop();  
    }

    /**  
    * Remove two Cards of the same rank, as specified by the user.  
    */  
    public void removePair() throws IllegalMoveException {  
        System.out.print("Location (1-4) of first card? ");  
        int i = INPUT.nextInt();  
        System.out.print("Location (1-4) of second card? ");  
        int j = INPUT.nextInt();  
        INPUT.nextLine(); // To clear out input  
        stacks[i - 1].pop();  
        stacks[j - 1].pop();  
    }  

    public String toString() {  
        String result = "";  
        for (int i = 0; i < 4; i++) {  
            if (stacks[i].isEmpty()) {  
                result += "-- ";  
            } else {  
                result += stacks[i].peek() + " ";  
            }  
        }  
        return result + "\n" + deck.size() + " cards left in the deck";  
    }

    /** Create and play the game. */    
    public static void main(String[] args) {    
        System.out.println("Welcome to Idiot's Delight.");   
        IdiotsDelight game = new IdiotsDelight();  
        game.play();  
    }

}

IllgalMoveException类以防万一:

 removePair();  

 removeLowCard();    

1 个答案:

答案 0 :(得分:0)

使用try-catch块捕获异常,如下所示:

//...
try{
    removePair();  
}catch(IllegalMoveException e){ 
    //... 
}
//...

//...
try{
    removeLowCard();    
}catch(IllegalMoveException e){ 
    //... 
}
//...