Java Try Catch块未捕获字符串输入(InputMismatchException)

Java Try Catch块未捕获字符串输入(InputMismatchException),java,exception-handling,try-catch,inputmismatchexception,Java,Exception Handling,Try Catch,Inputmismatchexception,我需要阻止用户输入字符串值 这是我到目前为止所做的尝试 import java.util.InputMismatchException; import java.util.Scanner; import java.util.Random; public class guessinggame { public static void main (String[] args) { int randomNumber = new Random().nextInt(10)

我需要阻止用户输入字符串值

这是我到目前为止所做的尝试

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

public class guessinggame
{
    public static void main (String[] args)
    {
        int randomNumber = new Random().nextInt(10);
        System.out.println("My number is " + randomNumber + ". ");

        System.out.println("I’m thinking of a number between 0 and 9.");
        System.out.println("What is your guess:");


        Scanner keyboard = new Scanner(System.in);
        int guess = keyboard.nextInt();
        guess1(guess);


        int input = 0;


            try{
                input = keyboard.nextInt();

            }catch (InputMismatchException e){
                int guess = keyboard.nextInt();
                System.out.println("Invalid.");
            }



           if (guess < randomNumber) {
                System.out.print("your guess was too low.");
           }else if (guess > randomNumber){
                System.out.print("your guess was too high.");
            }else if (guess == randomNumber){
                System.out.print("your guess was correct.");
        }
    }
}
import java.util.InputMismatchException;
导入java.util.Scanner;
导入java.util.Random;
公开课猜谜游戏
{
公共静态void main(字符串[]args)
{
int randomNumber=new Random().nextInt(10);
System.out.println(“我的号码是“+randomNumber+”);
System.out.println(“我想到的是一个介于0和9之间的数字”);
System.out.println(“您的猜测是什么:”);
扫描仪键盘=新扫描仪(System.in);
int guess=keyboard.nextInt();
猜测1(猜测);
int输入=0;
试一试{
输入=键盘.nextInt();
}捕获(输入不匹配异常e){
int guess=keyboard.nextInt();
System.out.println(“无效”);
}
如果(猜测<随机数){
System.out.print(“您的猜测太低了。”);
}else if(猜测>随机数){
System.out.print(“您的猜测太高了。”);
}else if(猜测==随机数){
System.out.print(“您的猜测是正确的。”);
}
}
}
我收到的错误是:
Duplicate local variable guess
阻止程序编译,但是我想我在让这个程序做我想做的事情时也丢失了一些位

它只需要接受0-9之间的整数值作为输入。其他任何内容(包括字符串)都应返回为无效

int guess = keyboard.nextInt();
应该是

guess = keyboard.nextInt();

编译器给您错误,因为您声明了两次
guess

  • int guess=keyboard.nextInt()开头一次
  • 然后在catch子句中使用
    int guess=keyboard.nextInt()再次
还要注意,您在代码中多次使用了
readInt()
,这意味着您多次尝试获取用户输入。您应该在代码中引用
guess


如果您经常遇到编译错误等问题,您可能需要使用IDE,例如。

主要错误是您在
catch
块中重新声明
guess

如果输入了无效数据,您真正需要做的是
循环

int guess = -1;  // some magic number
while (guess <= -1) {  // we do not want negative number
    try{
            guess = keyboard.nextInt();
        }catch (InputMismatchException e){
            System.out.println("Invalid - try again.");
            continue;
        }

    if (guess >= 0) {
        break;
    }
    System.out.println("We want between 0 and 9 - try again.");
}

// now we have valid value for guess
int guess=-1;//一些幻数
while(猜测=0){
打破
}
println(“我们希望介于0和9之间-再试一次”);
}
//现在我们有了猜测的有效值
编辑

根据新的要求

   int guess = -1;  // some magic number
    try{
            guess = keyboard.nextInt();
        }catch (InputMismatchException e){
            // do not need to do anything
        }

    if (guess < 0) {
            System.out.println("Invalid - will exit.");
            System.exit(-1); 
    }
// now we have valid value for guess
int guess=-1;//一些幻数
试一试{
guess=keyboard.nextInt();
}捕获(输入不匹配异常e){
//不需要做任何事情
}
如果(猜测<0){
System.out.println(“无效-将退出”);
系统退出(-1);
}
//现在我们有了猜测的有效值

读取错误!!!!你知道,编译器不是为了好玩才把这些东西吐出来的。它们很重要。如果你的代码没有编译,你怎么知道try-catch不起作用——也就是说,你的问题标题很糟糕!它不起作用,因为我还得到一个运行时错误,在java.util.Scanner.throwFor(Scanner.java:864)java.util.Scanner.next(Scanner.java:1485)java.util.Scanner.nextInt(Scanner.java:2117)java.util.Scanner.nextInt(Scanner.java:2117)java.util.Scanner.nextInt(Scanner.java:2076)gussinggame.main的线程中显示异常(guessinggame.java:17)@sawreals2:如果您可以显示更新的代码并指出哪一行引发异常,那么如果您仍然面临问题,社区可以继续提供帮助。@David我已经更新了代码。不匹配错误出现在第17行。我尝试按照Eric的建议将int guess改为guess,但出现了一个错误,说明无法将其解析为va变量。程序检测到不匹配错误,但我希望它打印出“无效”相反,正如我在catch块中所写的那样。@sawreals2:下面的答案是建议您从该变量的第二次声明中删除
int
关键字,而不是第一次声明。显然,在使用变量之前需要先声明该变量。至于您得到的异常,您提供了什么作为程序的输入m何时运行?如果无法将输入解析为
int
,则
nextInt()
将引发异常。您可以将其包装在
try/catch
块中以处理该异常。该程序只需要一次性输入。无需重新检查正确值在您的示例中,如果用户再次
catch
块中输入错误数据会发生什么?我将在“无效”之后添加system.exit(),它应该在无效的entryFine之后停止。您不需要我们的帮助,然后就可以了。我需要,但我不需要重新检查正确的值,这超出了我的范围。我只需要检查一次值。此外,我不能将其改为仅猜测,在这种情况下它无法解析为变量,并在整个代码中创建更多错误。