我正在写一个小程序(学生,虽然不是课堂上的任务......而是上一个作业的游戏)。以前在课堂上,在学习do/while
循环时,我写了一个程序,提示用户输入整数。当用户键入0时,它用于退出循环,然后输出所有键入的整数的平方和。
示例输出(换行时间隔为双倍):
输入一个整数:3
输入一个整数:0
正方形的总和是9
我现在的目标是更进一步。如上所述,如果用户键入除整数之外的任何内容,程序将崩溃。我一直在努力寻找允许用户输入其他形式的值的方法,而不会让它崩溃。在引用下面的代码时(这是当前程序崩溃的任何值ints
),我尝试使用console.hasNextInt()
方法添加if语句的变体。然而,我在此尝试会导致number
测试中do/while
未被引用的错误。
任何人都可以向我提供任何提示吗?我们将不胜感激。
public static void userInterface() {
Scanner console = new Scanner(System.in);
int number;
int numberSquared;
int squaredOutput = 0;
do {
System.out.print("Type an integer (0 to quit): ");
number = console.nextInt();
if (number > 0 || number < 0) {
numberSquared = number * number;
squaredOutput += numberSquared;
}
} while (number != 0);
System.out.println("The sum of the squares is " + squaredOutput);
}
答案 0 :(得分:2)
问题是你使用console.nextInt();
只接受下一个int。
您可以使用:console.nextLine();
。
它允许你的程序接受一个字符串,你可以在必要时将它解析为一个Int:
try {
number=Integer.parseInt(console.nextLine());
} catch(NumberFormatException e) {
System.out.println("Please input an Integer");
}
答案 1 :(得分:1)
只需使用此功能
public static int next(String message) {
while (true) {
System.out.println(message);
try {
return new Scanner(System.in).nextInt();
} catch (Exception e) {
System.out.println("Invalid input.");
}
}
}
答案 2 :(得分:0)
您的代码存在问题。当您使用console.nextInt()
并且扫描程序尝试将每个字符串解析为Integer时。更好的解决方案是使用console.nextLine()
并自己解析它的数字并捕获可能抛出的异常,如果该字符串不能解析为您想要的任何数字。
它可能看起来像这样。
String yourValue = console.nextLine();
try{
int value = Integer.parseInt(yourValue);
}catch(NumberFormatException e){
System.out.println("watch out this value is unparsable!");
}