經典改錯題(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 高。

 

發佈了55 篇原創文章 · 獲贊 68 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章