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 

     

     

    有更多循环问题欢迎补充

  • 相关阅读:
    Minutes和TotalMinutes的区别
    C#的"?"修饰符和"??"运算符
    Navicat 连接MySQL 8.0.11 出现2059错误
    EL1004E: Method call: Method fmtdate(java.util.Date,java.lang.String) cannot be found on org.thymele
    es nested结构判断不为空
    es nested嵌套查询
    CPU基础知识线程切换
    CPU基础知识CPU的组成 运算器、控制器、寄存器
    几个常用寄存器
    Linux笔记用户态与内核态
  • 原文地址:https://www.cnblogs.com/LLeiFeng/p/2889572.html
Copyright © 2011-2022 走看看