首页 > 解决方案 > 字符(运算符)的扫描仪输入如何工作?

问题描述

我写了一个关于用户输入的操作员输入结果的代码,请解释一下这个字符输入是如何工作的,因为当我使用

字符操作 = s.nextLine().charAt(0);

代替

字符操作 = s.next().charAt(0);

Eclipse 显示错误。

代码 -

    System.out.println("Enter First Number:");
    int a = s.nextInt();

    System.out.println("Enter Second Number:");
    int b = s.nextInt();

    System.out.println("Which Operation you want to execute?");
    s.hasNextLine();
    char operation = s.next().charAt(0);    

    int result = 0;

    switch (operation) {
    case '+' :
        result = a + b;
        break;
    case '-' :
        result = a - b;
        break;
    case '*' :
        result = a * b; 
        break;
    case '/' :
        result = a / b;
        break;
    case '%' :
        result = a % b;
        break;
    default:
        System.out.println("Invalid Operator!");
    }
    System.out.println(result);
    s.close();
}

}

标签: javacharjava.util.scannercharat

解决方案


来自 Scanner 的文档https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

由于此方法继续搜索输入以查找行分隔符,因此如果不存在行分隔符,它可能会缓冲所有搜索要跳过的行的输入。

因此,如果您放置 .nextLine() 您实际上是在读取自上次输入到下一行后剩下的内容(即什么也没有)。这可以用这段代码来证明

Scanner s = new Scanner(System.in);
System.out.println("Enter First Number:");
int a = s.nextInt();

System.out.println("Enter Second Number:");
int b = s.nextInt();

System.out.println("Which Operation you want to execute?");
s.hasNextLine();
String s1 = s.nextLine();
String s2 = s.nextLine();
System.out.println(s1);
System.out.println(s2);
//char operation = s1.charAt(0); -> error
char operation = s2.charAt(0);//operator is read

第一次打印 (s1) 不会打印任何内容。第二个将打印操作符。


推荐阅读