3

我需要帮助 使用错误的用户输入进行异常处理。我正在创建一个基于文本的游戏,它欢迎用户,然后进入主菜单。然后它告诉用户选项,然后寻找用户输入。出于某种原因,每当我输入 1 或 2 时,它都会显示:“您的输入无效,请重试”并返回选择。我不知道我到底哪里出错了,希望有人能帮助我。此外,它也不会捕获不匹配异常。希望你能帮忙!谢谢,山丹

   public static void main(String[] args) {



    System.out.println("Welcome to Spec Ops!");
    System.out.println("Please state your name:");
    Scanner name = new Scanner(System.in);
    String Name = name.next();

    System.out.println("Hello "+Name);
    mainMenu();

    }


public static void mainMenu() {

    System.out.println("1. Story Mode");
    System.out.println("2. Infinant Combat");



    Scanner input = new Scanner(System.in);



    Object Selection = input.nextInt();

    boolean validOption = true;
    Integer x;


    try {
    x = (Integer)Selection;
    } catch(ClassCastException cce){
        System.out.println("Your input is invalid, please try again");
        validOption = false;
    } catch(InputMismatchException ime){
        System.out.println("Your input is invalid, please try again");
        validOption = false;

    }


if(validOption) {
    System.out.println("Hello!");
}

else {
    mainMenu();
}

}

}

4

3 回答 3

7

Scanner.nextInt 返回 ant int,因此无需 go Object selection = scanner.nextInt(),然后强制转换为 int,您只需将int selection = scanner.nextInt()其包围在 try catch 中即可 chatches java.util.InputMismatchException,这是用户键入字母而不是数字

于 2012-12-20T19:10:00.460 回答
1

您可以临时更改代码并使用 Pokemon 异常处理并检查堆栈跟踪以查看您应该实现哪种异常:

try {
    //do something
} catch(Exception e) {
    //Gotta catch 'em all!
    e.printStackTrace();
}

一旦你知道确切的异常,放置一些断点并相应地重构你的代码。

此外,您不必通过更改 catch 块内的布尔变量来控制程序的流程:

boolean isValidOption = false;
Integer x;

try {
     x = (Integer)Selection;
     isValidOption = true;
} catch...
于 2012-12-20T19:22:25.037 回答
1

当您阅读名称时,您正在使用scanner.next()。这不会读取行尾字符,因此当您调用scanner.nextInt() 时,它会读取新行并且无法解析为int。

您应该将读取的名称更改为scanner.nextLine(),如果您想处理来自用户的无效int 输入,则对nextInt 的调用需要在您的try 块中并捕获InputMismatchException 而不是ClassCastException。

于 2012-12-20T19:35:45.490 回答