这是一个计算器程序。当我这样写时:
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");
}
}
程序不会等待第三个输入。当我尝试为第三个输入单独创建另一个扫描仪对象时,代码运行良好。 此外,当我尝试切换输入顺序以便首先输入字符串时,代码运行良好。 谁能告诉我发生了什么事吗?
最佳答案
我通过添加一个将 String
解析为 int
的函数来解决这个问题。您需要使用 input.nextLine()
,将其与 Scanner
一起传递给函数,然后使用该值。如果字符串不是数字,它将要求另一个输入。
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");
}
}
关于java - 字符串输入被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601458/