当前位置: 首页 > 知识库问答 >
问题:

尝试捕获无限异常,同时循环 [重复]

暴英达
2023-03-14

我希望程序在捕获异常时重新执行 while 循环 - 异常正在接收文本输入。相反,它继续使用下面的代码进行一段时间循环,我希望它再次要求用户输入。

import java.util.InputMismatchException;
import java.util.Scanner;

public class NumberGuess {
    public static void main(String[] args) {

        Scanner Scanner = new Scanner(System.in);

        int between = 100;
        int secretNumber = (int)(Math.random()*between);
        int inputNum = 0;
        int guesses = 0;

        System.out.println("Please enter your guess: ");
        inputNum = Scanner.nextInt();
        guesses++;

        // ####  Loop here ####
        while (inputNum != secretNumber) {  
            // Try catch
            try {

            // number too high or too low
            if (inputNum > 100 | inputNum < 0) {
                System.out.println("Please enter a guess between 0 and " + between + ".");
                inputNum = Scanner.nextInt();
            }

            // less than secretNumber
            if (inputNum < secretNumber) {
                System.out.println("Try higher");
                inputNum = Scanner.nextInt();
                guesses++;
            }

            // greater than secretNumber
            if (inputNum > secretNumber) {
                System.out.println("Try lower");
                inputNum = Scanner.nextInt();
                guesses++;
            }
            }
            catch(InputMismatchException e){
                System.out.println("Invalid Input");
            }
        }


        System.out.println("\nWell done! The secret number was " + secretNumber + "." + "\nYou took " + guesses +  " guesses.");
        }

}

输出:

Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher

共有3个答案

周翰池
2023-03-14

进行以下2项更改可以帮助您实现所需的功能。

1更改<代码> if(输入名称

如果输入非数字(如 a),则输入不匹配异常例外可以是 caugt。

  1. 当 InputMatchException 异常发生时,添加代码调用 Scanner.next() 以使其能够在控制台中重新输入数字。

变化

        // greater than secretNumber
        if (inputNum > secretNumber) {
            System.out.println("Try lower");
            inputNum = Scanner.nextInt();
            guesses++;
        }
        }
        catch(InputMismatchException e){
            System.out.println("Invalid Input");

        }

        // greater than secretNumber
        if (inputNum > secretNumber) {
            System.out.println("Try lower");
            inputNum = Scanner.nextInt();
            guesses++;
        }
        }
        catch(InputMismatchException e){
            System.out.println("Invalid Input");
            Scanner.next();

        }

随着上述变化,测试如下:

Please enter your guess: 
60
Try higher
80
Try higher
90
Try lower
a
Invalid Input
Try lower
80
Try higher
85
Try lower
84
Try lower
83
Try lower
82
Try lower
81

Well done! The secret number was 81.
You took 9 guesses.
全丰
2023-03-14

|是逻辑运算符。使用条件||

 if (inputNum > 100 || inputNum < 0) {
范云
2023-03-14

研究扫描仪上的留档:

当扫描程序引发 InputMismatchException 时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该标记。

如果发现异常,则扫描程序将保留在尝试读取数字之前的位置。您必须在捕获块中使用 nextLine 推进它。

 类似资料:
  • 我真的不知道这个问题。。。 如果数字不正确,块将捕获异常,当我输入-1或0时,它将捕获异常并要求我再次输入数字。。。但如果我键入类似asdasd的内容,它将运行一个无限循环。

  • 所以我正在构建一个程序,从用户输入中获取int。我有一个非常简单的try/catch块,如果用户没有输入int,应该重复这个块,直到他们输入int为止。以下是代码的相关部分: 如果我为第二个整数输入一个0,那么try/catch完全按照它应该做的做,并让我再次输入它。但是,如果我有一个InputMismatchException,比如为其中一个数字输入5.5,它只是在一个无限循环中显示我的错误消息

  • 我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它

  • 嗨,我正在使用netbean来练习java异常,我想在用户未输入数字时捕获异常。 上述代码导致无限循环,并阻止用户输入变量< code>a的值。

  • 问题内容: 因此,我正在构建一个从用户输入中获取整数的程序。我有一个看起来非常简单的try / catch块,如果用户不输入int,则应该重复该块直到他们这样做。这是代码的相关部分: 如果我为第二个整数输入0,那么try / catch会完全按照预期的方式运行,并让我再次放入。但是,如果我有一个InputMismatchException,例如为其中一个数字输入5.5,它只会在无限循环中显示我的错