zoukankan      html  css  js  c++  java
  • 趣味循环

    趣味循环

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

    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 

     

     

    有更多循环问题欢迎补充

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/LLeiFeng/p/2889572.html
Copyright © 2011-2022 走看看