java - 字符(运算符)的扫描仪输入如何工作?
问题描述
我写了一个关于用户输入的操作员输入结果的代码,请解释一下这个字符输入是如何工作的,因为当我使用
字符操作 = 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();
}
}
解决方案
来自 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) 不会打印任何内容。第二个将打印操作符。
推荐阅读
- javascript - 隐式事件对象传入错误事件侦听器
- python - Google OAuth 2.0 Web 应用程序查找错误项目的重定向 URI
- ms-access - 通过 VBA 在数据表视图中添加记录时防止重复记录
- reactjs - 带有 react-router 和 alanning-roles 的 Meteor.js
- node.js - NodeJS 电子邮件验证
- python - 将 statsmodels 摘要对象转换为 Pandas Dataframe
- r - 将重叠的日期范围与 R 中的层次结构合并
- python - 在 numpy 元组数组中的给定位置查找唯一值
- javascript - 恶意文件?
- reactjs - React Redux 与路由器位置、分页/排序和获取