我希望用户输入一个0-9之间的数字。如果他们输入的数字超出了这个范围(负数或大于9的数字),他们输入的输入是无效的。此外,我想使用try catch块来识别不正确的输入类型(字符串),并打印无效。
用户无需重新输入输入。一次就可以了。
到目前为止我所尝试的:
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();
try{
input = keyboard.nextInt();
}catch (InputMismatchException e){
guess = keyboard.nextInt();
System.out.println("Invalid.");
}
if (guess < randomNumber) {
System.out.println("your guess was too low.");
}else if (guess > randomNumber){
System.out.println("your guess was too high.");
}else if (guess == randomNumber){
System.out.println("your guess was correct.");
}else if (guess < 0){
System.out.println("Invalid.");
}else if (guess > 9){
System.out.println("Invalid.");
}
}
}
这里只有我的try catch块:
try{
input = keyboard.nextInt();
}catch (InputMismatchException e){
guess = keyboard.nextInt();
System.out.println("Invalid.");
}
我遇到的问题是,在编译时,我输入一个字符串输入,例如“abc”,程序会创建一个这种格式的运行时错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at guessinggame.main(guessinggame.java:17)
相反,在输入字符串后应该显示的所有内容都是:无效。
根据语句System. out.println(“无效”);
在我的catch块中。
您的错误被抛出在这一行:int猜测=keyboard. nextInt();
,它没有被try/catch
语句包围。正如您所知,每次调用Scanner.nextInt()
时,您都在请求新行。尝试这样做:
int guess = -1; // This will be an invalid input
try{
guess = keyboard.nextInt();
}catch (InputMismatchException e){
// Because guess is already -1, "invalid" will be printed out by
// Below if statements
}
这样,如果用户输入无效的猜测,您可以使用已经创建的if语句来处理它。
用户无需重新输入输入。一次就可以了。
您要求输入三次:
int guess = keyboard.nextInt(); // here
try{
input = keyboard.nextInt(); // here
}catch (InputMismatchException e){
guess = keyboard.nextInt(); // and here
System.out.println("Invalid.");
}
第一个是抛出异常。由于该异常没有被捕获,它正在终止应用程序。
看起来你只是想要这个:
int guess;
try {
input = keyboard.nextInt();
} catch (InputMismatchException e) {
System.out.println("Invalid.");
return;
}
代替catch
块末尾的返回
,您可以做其他事情,无论您想做什么都取决于您。但是如果猜测
从未设置为有效的int
,则该方法中的其余逻辑将不适用,因此默认情况下,我只是在此处退出该方法。
但基本上,如果您希望用户输入一次输入,那么只要求一次。并且任何时候您想处理异常,请将抛出异常的代码包装在try/catch
中以处理它。