java - 字符串输入被忽略

标签 java string input

这是一个计算器程序。当我这样写时:

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/

相关文章:

java - 在另一个 Observable 中订阅一个 Observable

javascript - 如何检查一个字符串 "StartsWith"是否是另一个字符串?

python - 在 Python 中从字符串中读取字节

c - 在gets之前输入C.scanf。问题

java - 在Java中,如何检查输入的数字和字母?

java - 封闭类与声明类

java - LibGDX, super 马里奥教程

java - JSF 表达式语言的代码风格指南

c - 为什么 `fgets()` 需要一个 *str 而 `getline()` 需要一个 **str 参数?

javascript - 为什么JS在表单标签之间不执行?