为什么我的try catch语句不起作用?

时间:2018-07-10 09:33:39

标签: java

程序非常简单,我只是测试try-catch语句的初学者,尽管我已经阅读了两天,但我仍然无法理解为什么这个特定的try语句对我不起作用。我知道我可以使用String而不是int,但是我想知道为什么它对此不起作用,以及如何使它起作用。 本质上,我希望用户输入1或2,如果他们输入1,程序(测验)将开始,否则,如果他们按2,程序将终止。如果他们按其他任何键,例如一个字母,另一个数字或尝试进行其他操作,它会说类似“重试”并重复相同的循环。

这似乎是一个愚蠢的问题,但是我对此并不陌生,不胜感激。

Scanner scanner = new Scanner(System.in);
int score = 0;

System.out.println("Are you ready for a quiz?\n1.yes\n2.no");
int input = scanner.nextInt();

do {
    scanner.nextInt();
        try {

            if (input == 2) {
                System.out.println("Maybe next time!");
                System.exit(0);
            } else if (input == 1) {
                System.out.println("Okay! good luck!\n");
            }

        } catch (InputMismatchException e) {
            System.out.println("Invalid input. Try again\n");
        }
} while (input != 1);

5 个答案:

答案 0 :(得分:2)

1 。有什么问题吗?

要看到Invalid input. Try againInputMismatchException必须扔到try块中,并且不会发生,因为输入没有进入if或{{1 }},您可以使用

else if

2 。如何处理这种用法?

但是try { if (input == 2) { System.out.println("Maybe next time!"); System.exit(0); } else if (input == 1) { System.out.println("Okay! good luck!\n"); }else{ throw new InputMismatchException(); } } catch (InputMismatchException e) { System.out.println("Invalid input. Try again\n"); } 不必用作正常行为,要准备拥有Exception,您需要:

Strings

3 。如何改进?

您可以更改某些System.out.println("Are you ready for a quiz?\n1.yes\n2.no"); String input; do { input= scanner.nextLine(); if (input.equals("2")) { System.out.println("Maybe next time!"); System.exit(0); } else if (input.equals("1")) { System.out.println("Okay! good luck!\n"); }else{ System.out.println("Invalid input. Try again\n"); } } while (!input.equals("1")); 的位置,因此可以简化为:

print

答案 1 :(得分:1)

我将int方法转换为String。我以为我只用一个int方法就可以达到同样的目的,但我做不到。谢谢大家,这是现在的样子:

enter code hereScanner scanner = new Scanner(System.in);


    System.out.println("Are you ready for a quiz?\n1.yes\n2.no");
    String input;

    do {
        input = scanner.nextLine();
        if(input.equals("2")) {
            System.out.println("Maybe next time!");
            System.exit(0);
        } else if (input.equals("1")) {
            System.out.println("Okay! good luck!\n");
        }


        else { System.out.println("Invalid input. Try again\n");
        } 

    } while (!input.equals("1"));

答案 2 :(得分:0)

仅在try块中抛出匹配异常时才执行catch块。 在这种情况下,不会发生任何异常。

答案 3 :(得分:-1)

在else块中抛出异常,您错过了。 就像这样

     try {
     if (input == 2) {
   System.out.println("Maybe next time!");
    System.exit(0);
    } else if (input == 1) {
     System.out.println("Okay! good luck!\n");
    }else{
     throw new InputMismatchException();
   }
   } catch (InputMismatchException e) {
  System.out.println("Invalid input. Try again\n");
 }

答案 4 :(得分:-1)

您正在捕获特定的异常,即InputMismatchException,但您的try块没有可引发此异常的代码,要处理该情况,必须强制抛出该异常,以便您的catch块可以处理该异常。