猜测数字的 InputMismatchException

InputMismatchException for guess number

我正在做一个猜谜游戏,我可以输入 1-100,但是如果我在第一次 运行 程序时输入一个字母,我就只能接受数字,它会给我错误,立即执行程序image herebut if ityped number after I start the program and type letter next it give me a wrong message it should only display message saying "invalid input".image here任何建议谢谢。

  package m1;
  import java.util.InputMismatchException;
   import java.util.Scanner;


  public class M1{


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++;


    while (inputNum != secretNumber) {  

        try {

        // number too high or too low
        if (inputNum > 100 || inputNum < 1) {
            System.out.println("Out of Range!");
            System.out.println("Enter a guess between 1 and " + between + ".");
            inputNum = Scanner.nextInt();
        }

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

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

    }
    }


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

}

  • 一般在java中命名变量名在大多数情况下使用camelCase
  • 您实际上不需要捕获任何异常,因为如果 scanner.hasNextInt()false,您可以简单地执行 scanner.next()。这次提示用户具体输入一个数字。

试试下面的代码here!

import java.util.Scanner;

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

    Scanner scanner = new Scanner(System.in);

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

    System.out.println("Lec's Guessing Game");
    System.out.println("====================");
    System.out.print("Please enter a guess between 1 and " + between + "(inclusive):");

    while(scanner.hasNext()){
      if(scanner.hasNextInt()){
        int inputNum = scanner.nextInt();
        guesses++;
        if(inputNum == secretNumber) {
          System.out.println("\nWell done! The secret number was " + secretNumber + "." + "\nYou took " + guesses +  " guesses.");
        }
        // number too high or too low
        if (inputNum > between || inputNum < 1) {
            System.out.println("Out of Range!");
            System.out.print("Enter a guess between 1 and " + between + "(inclusive):");
        }
        // less than secretNumber
        if (inputNum < secretNumber) {
            System.out.println("Too Low...Try Again!");
            System.out.print("Enter a guess between 1 and " + between + "(inclusive):");
        }
        // greater than secretNumber
        if (inputNum > secretNumber) {
          System.out.println("Too High...Try Again!");
          System.out.print("Enter a guess between 1 and " + between + "(inclusive):");
        }
      } else{
        System.out.print("ERROR: Invalid Input");
        System.out.print("Please enter a number: ");
        scanner.next();
      }
    }
  }
}