经典改错题(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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章