繁体   English   中英

扫描仪在构造函数中跳过我的 nextline() 语句

[英]scanner skipping my nextline() statement in constructor

好的,所以我知道在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 开箱即用的操作(开箱即用,扫描仪有一个奇怪的默认值 - '任意数量的空格'。在处理这样的命令行输入时不是您想要的)。

正确配置扫描仪后,您的构造函数将工作得很好。

如果不知何故这是不可能的,请制作标记为static实用方法并将您的扫描仪传递给它; 您可以从构造函数的super()行内部调用它们。 但与正确设置扫描仪相比,这是一个非常糟糕的第二选择。

您可以通过其他变量中的扫描仪获取数据,然后将其传递给构造函数更好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM