java - 扫描仪在构造函数中跳过我的 nextline() 语句
问题描述
好的,所以我知道nextInt()
如果我们使用nextLine()
它之后会跳过它,并纠正我们nextLine()
在它之前使用了额外的纠正它。没关系,但问题是我正在扫描构造函数中的值,我无法在其中添加额外nextLine()
内容,因为它给了我错误。
product c2=new product(value.nextInt(),value.nextLine(),value.nextDouble());
解决方案
好的,所以我知道在 nextInt() 之后如果我们使用 nextLine() 它将跳过它,并纠正我们在它之前使用额外的 nextLine() 来纠正它。
这不是真的。扫描仪在任何空格上分割,所以如果你输入“5”然后按回车,然后输入“你好”,上面的就可以了。但是如果用户输入“5”,然后点击空格(你知道,那个键盘上最大的键!)然后输入“Hello”,你的代码就会中断。
正确的解决方案是永远不要使用nextLine
. 相反,正确配置您的扫描仪:
Scanner s = new Scanner(System.in);
s.useDelimiter("\\R");
String entireLine = s.next(); // this replaces nextLine
int aNumber = s.nextInt();
\\R
是正则表达式:单个换行符。这是您期望 Scanner 开箱即用的功能(开箱即用,scanner 有一个奇怪的默认值 - '任意数量的空格'。在处理这样的命令行输入时不是您想要的)。
正确配置扫描仪后,您的构造函数将运行良好。
如果不知何故这是不可能的,请制作标记的实用方法static
并将您的扫描仪传递给它;super()
您可以从构造函数的行内调用它们。但与仅正确设置扫描仪相比,这是一个非常遥远的蹩脚的第二选择。
推荐阅读
- python - 如何正确拆分不平衡的数据集以训练和测试集?
- python - 字典中的某些字段未写入 csv 文件
- android - RecyclerView.ViewHolder.itemView getWidth() getHeight() 返回 0
- node.js - 需要 npm init 吗?
- c# - 使用 JSON 数组创建 RDLC 报告
- laravel - 如何在laravel中按天获取结果计数组
- node.js - Winston 工作不正常,我无法使用 winston 获取日志文件中的所有控制台值
- javascript - mat-spinner 如何在 mat-table 内呈现?
- javascript - 将引导插件添加到 Angular 8
- wordpress - 如何根据插件版本、主题开发WordPress添加条件?