功能
输出int范围内最小值到最大值的所有数是否是奇数,代码如下。
public class Main {
public static void main(String[] args) {
for (int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; ++i) {
boolean isEven = (i % 2 == 1);
System.out.println(String.format("i=%d, isEven=%b", i, isEven));
}
}
}
分析
咋一看,可能会感觉没有问题啊!其实不然,就这短短几行,里面的坑还是不少哦。
错误内容如下:
1. for 循环是死循环。当i从int类型的最小值循环到int的最大值时,满足 i <= Integer.MAX_VALUE 的条件,i继续自增,接着i就溢出变成int类型的最小值了,又满足 i <= Integer.MAX_VALUE 的条件,循环无法终止;
2. i % 2 == 1 来判断i是否是奇数,是不合适的,因为当i是负奇数时,i % 2是-1,所以应该用i % 2 != 0来判断i是奇数;
3. i % 2 来判断奇数的效率没有 i & 1 高。