![](/img/trans.png)
[英]Scanner is skipping nextLine() after using next() or nextFoo()?
[英]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.