趣味循环
一下是趣味十足的几道关于循环的题目。
1、请声明一个对i的声明,将下面的循环转变为一个无限循环
while(i!=i)
{}
有木有一开始愣了,很明显的i!=i 返回肯定是false,这应该是马上终止的。
翻阅资料后:
原来 IEEE754浮点算数保留了一个特殊值用来表示一个不是数字的数量。这个值就是NaN,即 Not a Number 的缩写。规范中表示,NaN 不等于任何浮点数值,包括它自身在内。
所以 i 在循环之前被初始化为NaN,那么i!=i的计算结果就是true循环永远不会停止。
Double i = Double.NaN;
另外 任何浮点操作,只要它的一个或多个操作数为NaN,那么其结果就是NaN.
一旦一个计算产生了NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。
2、请声明一个对i的声明,将下面的循环转变为一个无限循环
While(i != i+0)
{}
这道题限制了 i不可是 float 或double。
那么其实很简单只要将i 定义为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;
解决这个问题可以将i 定义为long 。
有更多循环问题欢迎补充