趣味循环

趣味循环

一下是趣味十足的几道关于循环的题目。

1、请声明一个对i的声明,将下面的循环转变为一个无限循环

while(i!=i)

{}

 

有木有一开始愣了,很明显的i!=i 返回肯定是false,这应该是马上终止的。

 

翻阅资料后:

 

原来 IEEE754浮点算数保留了一个特殊值用来表示一个不是数字的数量。这个值就是NaN,即 Not a Number 的缩写。规范中表示,NaN 不等于任何浮点数值,包括它自身在内。

 

所以 在循环之前被初始化为NaN,那么i!=i的计算结果就是true循环永远不会停止。

 

Double i  = Double.NaN;

 

另外 任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果就是NaN.

 

一旦一个计算产生了NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。

 

 

 

2、请声明一个对i的声明,将下面的循环转变为一个无限循环

While(i != i+0)

{}

这道题限制了 i不可是 float double

 

那么其实很简单只要将定义为String 类型就可以了

 

Int 类型的0被转换为String 0,

所得到的字符串在equals的情况下就不相等了。==下更不相等了。

 

3

下面这段代码将会输出什么呢?

public class practice {

 

public static final int END = Integer.MAX_VALUE;

public static final int START = END - 100;

 

 

public static void main(String[] args) {

int count  = 0;

for(int i = START;i<=END;i++)

 

count ++;

System.out.println(count);

}

}

 

最后的结果是什么都没有输出,有多少人是对的呢?

 

一开始也以为最后结果是101.

 

后来才知道,程序里面有一个死循环,发现了没哟?

 

因为Integer.MAX_VALUE 被定义成是一个int数值中最大的数了。

 

所以在i<=END中,i永远不可能等于END,当到达最大是在加1后变成了Integer.MIN_VALUE;

 

 

解决这个问题可以将定义为long 

 

 

有更多循环问题欢迎补充

posted @ 2013-02-01 20:47  LLeiFeng  阅读(727)  评论(0编辑  收藏  举报