【发布时间】:2016-09-27 00:36:24
【问题描述】:
我需要阻止用户输入字符串值。
这是我迄今为止尝试过的。
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.");
}
}
}
我收到的错误是:Duplicate local variable guess 阻止程序编译,但是我想我也错过了让这个程序做我想做的事情。
它只需要接受 0-9 之间的整数值作为输入。其他任何内容(包括字符串)都应返回无效。
【问题讨论】:
-
阅读错误!!!编译器不会为了好玩而吐出这些东西。它们很重要。如果您的代码无法编译,您怎么知道 try-catch 不起作用 - 即您的问题标题非常糟糕!
-
它不起作用,因为我还收到一个运行时错误,在 java.util.Scanner.throwFor(Scanner.java:864) 线程“main”java.util.InputMismatchException 中显示异常在 java.util.Scanner.next(Scanner.java:1485) 在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 guessinggame.main( guessinggame.java:17)
-
@sawreals2:如果您可以显示更新后的代码并指出哪一行引发了异常,如果您仍然遇到问题,社区可以继续提供帮助。
-
@David 我已经更新了代码。 mismatcherror 在第 17 行。我尝试按照 Eric 的建议将 int guess 更改为 guess 但这给出了一个错误,表明它无法解析为变量。程序检测到不匹配错误,但我希望它打印出“无效”,正如我在 catch 块中所写的那样。
-
@sawreals2:下面的答案是建议您从该变量的 second 声明中删除
int关键字,而不是第一个。很明显,一个变量需要先声明才能使用。至于你得到的异常,你在程序运行时提供什么作为输入?如果输入无法解析为int,那么nextInt()将抛出异常。您可以将其包装在try/catch块中以处理该异常。
标签: java exception-handling try-catch inputmismatchexception