字符串输入被忽略

时间:2017-03-04 21:10:33

标签: 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");
    }
}

程序不等待第三次输入。当我试图单独为第三个输入创建另一个扫描仪对象时,代码运行良好。 此外,当我尝试切换输入的顺序,以便我首先获取字符串输入时,代码运行良好。 谁能告诉我发生了什么?

2 个答案:

答案 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的建议很有效。

另外,我建议您确保阅读正确的输入(您可以打印出来。)并且不信任将要输入的用户。如果用户提供错误的输入,例如exceptionstring而不是double,您的计划将提供integer