1. 程式人生 > >經典改錯題(2013年巨人網路 Java 筆試題改編)

經典改錯題(2013年巨人網路 Java 筆試題改編)

功能

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