黑马程序员技术交流社区

标题: 循环问题 [打印本页]

作者: 高贵杰    时间: 2013-3-12 15:39
标题: 循环问题
本帖最后由 高贵杰 于 2013-3-12 17:43 编辑

public class InTheLoop_26 {
        public static void main(String[] args) {
                 int END = Integer.MAX_VALUE;
                 int START = END - 100;
                 int count=0;
                for(int x =START;x<=END;x++)
                {
                        count++;
                }
                System.out.println(count);
        }

}

这是一个挺简单的循环,但是在并没有按照预期的输出100,而是什么也没有打印,并且形成死循环,手动停止才可以。请各位帮忙看看哪里写的有问题。


作者: 刘海浩    时间: 2013-3-12 15:48
当x=Integer.MAX_VALUE时,并且再次执行增量操作x++时,x就会等于Integer.MIN_VALUE,会继续无限循环下去。想输出打印结果可以将x<=END改写成是x<END.
作者: 许鑫星    时间: 2013-3-12 15:49
  1.                 for(int x =START;x<END;x++)
  2.                 {
  3.                         count++;
  4.                 }
复制代码
这里要把等号去掉,因为加上等号,在取到最大值之后还要自加,由于计算机内部数字用反码表示,最大值+1之后就会变成最小值,然后就会开始无限循环。
作者: 牛合超    时间: 2013-3-12 16:00
记得之前在网上研究过这个问题嗒,,,

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

  //因为它被定义为所有int数值中的最大值。当i达到Integer.MAX_VALUE,并且再次被执行增量操作时,它就有绕回到了Integer.MIN_VALUE
     但是所有的int变量都是小于或等于Integer.MAX_VALUE的,,这就是上面的for循环为么是一个无限循环的原因

  改成如下:
   for(long i = START; i<=END; i++) {  
            count ++;  
        }  

作者: 陈丽莉    时间: 2013-3-12 16:02
如果没有问题了,请将帖子分类改成【已解决】~
作者: 熊冠银    时间: 2013-3-12 16:06
陈丽莉 发表于 2013-3-12 16:02
如果没有问题了,请将帖子分类改成【已解决】~

弱弱的问一句,帖子分类怎么改啊
作者: 陈丽莉    时间: 2013-3-12 16:18
熊冠银 发表于 2013-3-12 16:06
弱弱的问一句,帖子分类怎么改啊

论坛发言的小技巧(已解决、上传图片、附件,回复可见...
作者: 打工人    时间: 2013-3-12 16:27
跟这个帖子一样啊 http://bbs.itheima.com/thread-40432-1-1.html
这是因为Integer.MAX_VALUE+1后溢出,成了负数。也就是说x永远都不会大于Integer.MAX_VALUE
是个死循环
作者: 陈丽莉    时间: 2013-3-12 16:32
冯海霞 发表于 2013-3-12 16:27
跟这个帖子一样啊 http://bbs.itheima.com/thread-40432-1-1.html
这是因为Integer.MAX_VALUE+1后溢出,成 ...

那怎么办。。
作者: 牛合超    时间: 2013-3-12 16:36
我都说了,,,记得之前在网上研究过这个问题嗒,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2