如果我将if中的typedNum替换为x((typedNum.nextInt() > 21 && typedNum.nextInt()< 30))
,则它工作得很好。为什么会这样?
import java.util.Scanner;
public class Main {
public static int number(Scanner typedNum) {
int x = 0;
int i = 0;
while (i < 1) {
x = typedNum.nextInt();
if ((typedNum.nextInt() > 21 && typedNum.nextInt()< 30)) {
System.out.println("in range");
i=1;
}
else {
System.out.println("Not in range");
}
}
System.out.println(x);
return (x);
}
public static void main(String[] args) {
Scanner y = new Scanner(System.in);
number(y);
}
}
调用typedNum.nextInt()
的每个实例都从STDIN
获得一个单独的输入。当您使用x
代替函数调用时,它非常有效,因为您只需要接受一次输入,然后再使用多次。
每次调用nextInt()
时,扫描仪都会读取一个新号码。如果执行nextInt() > 21 && nextInt() < 30
,它将读取一个数字,并将其与21进行比较,如果它小于,它将不会计算和的后半部分。这被称为"短路评估"。如果大于,则将评估和的后半部分,并读取另一个值。您应该每次比较x
。
x = typedNum.nextInt();
if ((x > 21 && x < 30)) {
System.out.println("in range");
i=1;
}