Java:程序在捕获InputMismatchException后终止

时间:2018-06-12 02:15:56

标签: java exception

我有一个类Player,它包含一个以整数作为参数的函数。在我的main函数中,它在另一个名为Game的类中,我有一个接受用户输入的部分,并将它传递给Player类的DoMove(int i)函数。 在我的游戏课上,我有这个:

    public static void main(String[] args)
    {
        Player p1 = new Player();
        Scanner input = new Scanner(System.in);
        int entry;
        while(GameNotOver() == true)
        {

            do{
                try
                {
                    p1.DoMove(entry);

                } catch (InputMismatchException e)
                {
                    System.out.println("Bad choice!");
                    input.next();
                }
            } while (p1.DoMove(entry) == false);
       }
    }

本质上,main函数是将一个参数传递给另一个类函数,它可以正常工作。但该参数应该是一个整数。如果我输入一堆字符然后按回车键,我就明白了:

Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:864)
        at java.util.Scanner.next(Scanner.java:1485)
        at java.util.Scanner.nextInt(Scanner.java:2117)
        at java.util.Scanner.nextInt(Scanner.java:2076)

主GameNotOver循环运行正常,如果省略所有异常处理,整个程序将完美运行。 程序退出。我想我没有正确捕捉异常。有什么提示吗?

2 个答案:

答案 0 :(得分:0)

你应该发布你的DoMove方法,因为这段代码不能抛出你所面临的错误。此外,您不应该在catch块中调用from splinter import Browser from splinter.driver.webdriver.chrome import WebDriver as ChromeWebDriver _DRIVERS = { 'chrome': ChromeWebDriver, } browser = Browser('chrome') url = 'http://127.0.0.1:4444/' browser.visit(url) browser.find_by_id('username').fill('eee@eeee.com') browser.find_by_id('password').fill('eeeexxxx') browser.find_by_id('sub_btn').click() browser.find_by_xpath('//*[@id="sign_out_button"]').click() ,因为它没有意义。如果输入中有错误,显然你不想尝试读取它,因为它是一个无效的条目。

答案 1 :(得分:0)

您的异常将从以下引发:

p1.DoMove(entry)

然后在处理异常后立即执行完全相同的操作:

} while (p1.DoMove(entry) == false)

DoMove(条目)在使用相同的输入再次调用时是否会采取不同的行为?