字符(运算符)的扫描输入是如何工作的



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

char运算=s.nextLine((.charAt(0(;

而不是

char运算=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();
}

}

问题不是因为s.nextLine();而是因为s.nextInt()。检查扫描仪在使用next((或nextFo((后是否跳过nextLine((?了解更多信息。

使用

int a = Integer.parseInt(s.nextLine());

而不是

int a = s.nextInt();

我建议您创建一个实用程序函数,如本答案中创建的getInteger,以处理特殊情况。

来自扫描仪的文档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(将不会打印任何内容。第二个将打印操作员。

最新更新