經典改錯題(2013年巨人網路 Java 筆試題改編)
阿新 • • 發佈:2019-02-13
功能
輸出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 高。