Java 尝试捕获无限循环时的异常

Java 尝试捕获无限循环时的异常,java,while-loop,try-catch,Java,While Loop,Try Catch,我希望程序在捕获异常时重新执行while循环——异常接收到文本输入。相反,它将继续使用下面的代码进行while循环,我希望它再次请求用户输入 import java.util.InputMismatchException; import java.util.Scanner; public class NumberGuess { public static void main(String[] args) { Scanner Scanner = new Scanner(

我希望程序在捕获异常时重新执行while循环——异常接收到文本输入。相反,它将继续使用下面的代码进行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.");
        }

}

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

 if (inputNum > 100 || inputNum < 0) {
if(inputNum>100 | | inputNum<0){

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

 if (inputNum > 100 || inputNum < 0) {
if(inputNum>100 | | inputNum<0){

研究
扫描仪上的文档:

当扫描器抛出一个
InputMismatchException
时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌


如果捕获到异常,扫描仪将保留在尝试读取号码之前的位置。您必须在捕获块中使用
nextLine
将其推进。

研究
扫描仪上的文档:

当扫描器抛出一个
InputMismatchException
时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌


如果捕获到异常,扫描仪将保留在尝试读取数字之前的位置。必须在捕获块中使用
nextLine
将其推进。

进行2次更改,如下所示可以帮助您实现所需的功能

1将
if(inputNum>100 | inputNum<0){
更改为
if(inputNum>100 | inputNum<0){

如果输入非数字数字,例如a,则输入不匹配异常异常可能为caugt

  • 当发生InputMismatchException异常时,添加代码调用
    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");
    
            }
    

    根据上述变化,测试如下所示:

    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.
    

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

    1将
    if(inputNum>100 | inputNum<0){
    更改为
    if(inputNum>100 | inputNum<0){

    如果输入非数字数字,例如a,则输入不匹配异常异常可能为caugt

  • 当发生InputMismatchException异常时,添加代码调用
    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");
    
            }
    

    根据上述变化,测试如下所示:

    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.
    

    Scanner Scanner=new Scanner(System.in);
    这真的可以编译吗?@marounnaroun当然可以,它只是不遵循Java的命名conventions@Reimeus很高兴知道,我从未尝试过:)
    Scanner Scanner=new Scanner(System.in)
    这真的可以编译吗?@marounnaroun当然可以,它只是不遵循Java的命名conventions@Reimeus很高兴知道,我从未尝试过:)
    |
    也是一个逻辑运算符。它实现布尔OR函数,就像
    |
    也是一个逻辑运算符一样。它实现布尔OR函数,只是正如
    |
    .Brilliant一样-成功了。只需在catch方法中添加“Scanner.nextLine();”。非常感谢。Brilliant-成功了。只需在catch方法中添加“Scanner.nextLine();”。非常感谢。