这是一个计算器程序。当我这样写的时候:
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
int x1 = input.nextInt();
int x2 = input.nextInt();
String x3 = input.nextLine();
if ("+".equals(x3)){
int r= x1 + x2;
System.out.println(r);
} else if ("-".equals(x3)) {
int r= x1 - x2;
System.out.println(r);
} else if ("*".equals(x3)) {
int r= x1 * x2;
System.out.println(r);
} else if ("/".equals(x3)) {
int r= x1 / x2;
System.out.println(r);
} else if ("%".equals(x3)) {
int r= x1 % x2;
System.out.println(r);
} else {
System.out.println("invalid input");
}
}
程序不等待第三次输入。当我试图单独为第三个输入创建另一个扫描仪对象时,代码运行良好。 此外,当我尝试切换输入的顺序,以便我首先获取字符串输入时,代码运行良好。 谁能告诉我发生了什么?
答案 0 :(得分:1)
我通过添加一个将String
解析为int
的函数来解决它。您需要使用input.nextLine()
,将其与Scanner
一起传递给该函数,然后使用该值。如果String不是数字,它将要求另一个输入。
private static int parseInt(String s, Scanner input) {
try {
return Integer.parseInt(s);
} catch(NumberFormatException e) {
return parseInt(input.nextLine(), input);
}
}
你可以像这样使用它:
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
int x1 = parseInt(input.nextLine(), input);
int x2 = parseInt(input.nextLine(), input);
String x3 = input.nextLine();
if ("+".equals(x3)){
int r= x1 + x2;
System.out.println(r);
} else if ("-".equals(x3)) {
int r= x1 - x2;
System.out.println(r);
} else if ("*".equals(x3)) {
int r= x1 * x2;
System.out.println(r);
} else if ("/".equals(x3)) {
int r= x1 / x2;
System.out.println(r);
} else if ("%".equals(x3)) {
int r= x1 % x2;
System.out.println(r);
} else {
System.out.println("invalid input");
}
}
答案 1 :(得分:0)
问题是input.nextInt()
只读数字,input.nextLine()
后读空字符串。因此,x3
被认为是一个空字符串,并在结尾处给出错误。
@LórántViktorGerber的建议很有效。
另外,我建议您确保阅读正确的输入(您可以打印出来。)并且不信任将要输入的用户。如果用户提供错误的输入,例如exception
或string
而不是double
,您的计划将提供integer
。