A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高贵杰 中级黑马   /  2013-3-12 15:39  /  2159 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高贵杰 于 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,而是什么也没有打印,并且形成死循环,手动停止才可以。请各位帮忙看看哪里写的有问题。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

9 个回复

倒序浏览
当x=Integer.MAX_VALUE时,并且再次执行增量操作x++时,x就会等于Integer.MIN_VALUE,会继续无限循环下去。想输出打印结果可以将x<=END改写成是x<END.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 基本是对的~

查看全部评分

回复 使用道具 举报
  1.                 for(int x =START;x<END;x++)
  2.                 {
  3.                         count++;
  4.                 }
复制代码
这里要把等号去掉,因为加上等号,在取到最大值之后还要自加,由于计算机内部数字用反码表示,最大值+1之后就会变成最小值,然后就会开始无限循环。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
记得之前在网上研究过这个问题嗒,,,

  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 ++;  
        }  

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
如果没有问题了,请将帖子分类改成【已解决】~
回复 使用道具 举报
陈丽莉 发表于 2013-3-12 16:02
如果没有问题了,请将帖子分类改成【已解决】~

弱弱的问一句,帖子分类怎么改啊
回复 使用道具 举报
熊冠银 发表于 2013-3-12 16:06
弱弱的问一句,帖子分类怎么改啊

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

那怎么办。。
回复 使用道具 举报
我都说了,,,记得之前在网上研究过这个问题嗒,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马