什么申明使得以下循环称为无限循环(  ;)
while(i==i+1){  }

解决方案 »

  1.   

    while(i==i+1){ }不是死循环
      

  2.   

    double i = Double.POSITIVE_INFINITY;
      

  3.   

    一个数永远不会等于它自己加1吗?i==i+1
    一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如1.0e40),等式就可能成立了。 Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。 浮点型分为double型、float型。 无穷分为正无穷与负无穷。 无穷大加1还是无穷大。 一个浮点数值越大,它和其后继数值之间的间隔就越大。 对一个足够大的浮点数加1不会改变它的值,因为1不足以“填补它与其后者之间的空隙”。 浮点数操作返回的是最接近其精确数学结果的浮点数值。 一旦毗邻的浮点数值之间的距离大于2,那么对其中的一个浮点数值加1将不会产生任何效果,因为其结果没有达到两个数值之间的一半。对于float类型,加1不会产生任何效果的最小数是2^25,即33554432;而对于double类型,最小数是2^54,大约是1.8*10^16。 33554432F转二进制过程:
    33554432的二进制为:10000000000000000000000000,将该二进制化成规范的小数二进制,即小数从右向左移25位1.0000000000000000000000000,化成浮点数二进制0,25+127, 00000000000000000000000 00(丢弃最后两位),即0, 10011000, 00000000000000000000000,最后的结果为1.00000000000000000000000*2^25
    毗邻的浮点数值之间的距离被称为一个ulp,它是最小单位(unit in the last place)的首字母缩写。在5.0版本中,引入了Math.ulp方法来计算float或double数值的ulp。 二进制浮点算术只是对实际算术的一种近似。Java代码 
    // 注,整型数不能被 0 除,即(int)XX/0运行时抛异常   
    double i = 1.0 / 0.0;// 正无穷大   
    double j = -1.0 / 0.0;// 负无穷大   
    // Double.POSITIVE_INFINITY定义为:POSITIVE_INFINITY = 1.0 / 0.0;   
    System.out.println(i + " " + (i == Double.POSITIVE_INFINITY));//Infinity true   
    // Double.NEGATIVE_INFINITY定义为:NEGATIVE_INFINITY = -1.0 / 0.0;   
    System.out.println(j + " " + (j == Double.NEGATIVE_INFINITY));//-Infinity true   
    System.out.println(i == (i + 1));// true   
    System.out.println(0.1f == 0.1);// false   
    float f = 33554432;   
    System.out.println(f + " " + (f==(f+1)));//3.3554432E7 true  // 注,整型数不能被 0 除,即(int)XX/0运行时抛异常
    double i = 1.0 / 0.0;// 正无穷大
    double j = -1.0 / 0.0;// 负无穷大
    // Double.POSITIVE_INFINITY定义为:POSITIVE_INFINITY = 1.0 / 0.0;
    System.out.println(i + " " + (i == Double.POSITIVE_INFINITY));//Infinity true
    // Double.NEGATIVE_INFINITY定义为:NEGATIVE_INFINITY = -1.0 / 0.0;
    System.out.println(j + " " + (j == Double.NEGATIVE_INFINITY));//-Infinity true
    System.out.println(i == (i + 1));// true
    System.out.println(0.1f == 0.1);// false
    float f = 33554432;
    System.out.println(f + " " + (f==(f+1)));//3.3554432E7 true 
      

  4.   

    直接:
    while(true){
    System.out.println("while");
    }
    for(;;){
    System.out.println("for");
    }
      

  5.   

    所以说哦,书是要看的一切尽在《java解惑》中
      

  6.   

    对啊,上面说到很对啊,一个很大的数加上1后在java中可能会损失精度的问题啊!
      

  7.   

    while(true) {}
    书上有的,你没看书吗?很多很多的书在书店,你可以去取经...
      

  8.   

    while(i==i+1){}
    不论i为何值i==i+1都为假所以根本不会进入循环,怎么成为死循环。
      

  9.   

       如果是基础问题的话,就应该是for(;;;);
    while(true){};
      
      如果层次高点,就是精度的问题了
      

  10.   

    这个.....还有何意义啊!!我原以为i为boolean可以,结果int和boolean不兼容!!!