我在java中制作一个数字猜谜游戏。我希望应用程序在用户键入字符串而不是整数时打印一行。这就是我的代码:
import java.util.Scanner;
import java.util.Random;
public class guessing_game {
static Scanner input = new Scanner(System.in);
static Random generator = new Random();
public static void main(String[] args) {
int number;
number = generator.nextInt(20);
System.out.println("Guess the number!");
game(number);
}
public static void game(int number) {
int inputStorage = 0;
boolean b = true;
while (b) {
if (input.hasNextInt()) {
inputStorage = input.nextInt();
if (inputStorage == number) {
System.out.println("You've won!");
b = false;
}
else {
System.out.println("Wrong number! Try again.");
}
}
else {
System.out.println("Only numbers! Try again.");
}
}
}
}
问题是,当用户键入字符串(如字母)时,应用程序会显示:只有数字!再试一次。该应用程序不会一次又一次地停止打印此行。如何阻止这个?
答案 0 :(得分:1)
public static void game(int number) {
while (true) {
try{
System.out.print("Guess a number: "); // prompt user to enter an int
inputStorage = input.nextInt(); // read the number
if (inputStorage == number) {
System.out.println("You've won!");
break;
}
else {
System.out.println("Wrong number! Try again.");
}
} catch(final Exception ignored) { // input was not a number
System.out.println("\nOnly numbers! Try again.");
input.next(); // consume the invalid input
}
}
}
这将提示用户输入一个号码,并告诉用户如果没有号码,他们需要输入一个号码。
如果用户没有输入有效数字,则会抛出异常并将其捕获到catch
语句中。在这种情况下,输入的输入不是整数。
答案 1 :(得分:1)
如果您插入的内容不是数字,那么(input.hasNextInt())
将返回false,因此您不会进入该if语句并转到最低的else语句。
我建议你改为阅读下一个字符串,如果字符串不能转换为int,那么你就处理了这种情况
答案 2 :(得分:0)
使用try catch语句很简单
try {
...
} catch (NumberFormatException, ScannerException exception) {
System.out.println("Input must be a number.");
}