功能
輸出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 高。