检查 Java 中的值是否大于零

Check if value is greater than zero in Java

让我开始说我是 Java 的 绝对初学者,到目前为止我整理的内容花了我很长时间。

考虑到这一点,我有这段代码可以检查用户是否输入了字节值,如果没有则显示错误消息:

while (!keyboard.hasNextByte()) {
     keyboard.next();
     System.err.print("Error, try again: ");
 }

我想添加的是另一个条件,它检查用户是否输入了大于零的值。所以沿着这些方向:

 while (!keyboard.hasNextByte() && keyboard > 0) {

我该怎么做?我也很感激对答案的解释,这样我就可以通过这种方式了解更多信息。塔

你真正的意思是当没有有效字节 OR 等于零时,要求用户输入:

byte b;
while (!keyboard.hasNextByte() || (b=keyboard.nextByte()) <= 0) {
    System.err.print("Error, try again: ");
}

你可以这样做:

    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() 会变的!