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之后停止。您不需要我们的帮助,然后就可以了。我需要,但我不需要重新检查正确的值,这超出了我的范围。我只需要检查一次值。此外,我不能将其改为仅猜测,在这种情况下它无法解析为变量,并在整个代码中创建更多错误。