让我开始说我是一个绝对的Java初学者,到目前为止我把它放在一起花了很多时间。
因此,考虑到这一点,我有我的代码片段,用于检查用户是否输入了字节值,如果没有,则会显示错误消息:
while (!keyboard.hasNextByte()) {
keyboard.next();
System.err.print("Error, try again: ");
}
我想添加的另一个条件是检查用户是否输入了大于零的值。所以有这样的话:
while (!keyboard.hasNextByte() && keyboard > 0) {
我该怎么做?我也很感激答案的解释,所以我可以通过这种方式学到更多。 TA
答案 0 :(得分:0)
你的意思是,当没有有效字节 OR 等于零时,请求用户输入:
byte b;
while (!keyboard.hasNextByte() || (b=keyboard.nextByte()) <= 0) {
System.err.print("Error, try again: ");
}
答案 1 :(得分:0)
你可以这样做:
byte savedInput;
boolean savedHasNextByte;
while (!(savedHasNextByte = keyboard.hasNextByte()) || (savedInput = keyboard.nextByte()) <= 0) {
if (!savedHasNextByte) keyboard.next();
System.err.print("Error, try again: ");
}
然后在savedInput
中获取您的价值。
<强>解释强>
Java中的||
运算符是短路的。所以:
如果!keyboard.hasNextByte()
(输入不是字节)则不评估第二部分,它会打印错误,忽略输入,然后再次输入。
如果!keyboard.hasNextByte()
为假(输入为字节),则将输入keyboard.nextByte()
保存到savedInput
并检查它是否大于0。
如果不是,那么您也会忽略它,否则您的输入位于savedInput
(而不是keyboard.nextByte()
,因为您已经调用过一次!)
但是,如果||
不是短路,那么无论keyboard.nextByte()
如何,都会评估keyboard.hasNextByte()
,这可能会导致错误。
修改:我们必须保存hasNextByte()
,因为如果keyboard.hasNextByte()
,keyboard.nextByte()
将会读取键盘,hasNextByte()
会更改!< / p>