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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈强fly 中级黑马   /  2014-12-13 22:09  /  1543 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈强fly 于 2014-12-13 22:14 编辑

class JiOuShuHeDemo
{
        public static void main(String[] args)
               
        {        
               
                int i=96;
                while(i<=101)
                {
                        
                        System.out.println("i="+" "+i);
                        i++;
                }
        
                while(i<=111)
                {
                        if(i%2==0)
                        {
                                
                        System.out.println("i="+" "+i);
                        i++;
                        }
                }

}
编译通过,但运行时为什么是个死循环?
               

15 个回复

倒序浏览
问什么呢

回复 使用道具 举报
你这个是想表达什么呢?
回复 使用道具 举报
这片代码没啥问题啊。 一定要说有问题的话 最后少一个大括号。。
回复 使用道具 举报
楼主这是想要表达什么呢?
回复 使用道具 举报
当i=102的时候,if (i%2==0)判断条件成立,i++,i=103,符合while(i<=101),接着判断 if(i%2==0)语句,不符合该判断条件。而 i++在 if 语句中,所以此时  i 的值仍是 i=103,无限判断while(i<=101),所以会成死循环。
回复 使用道具 举报
爱卿 中级黑马 2014-12-13 22:22:25
7#
本帖最后由 爱卿 于 2014-12-13 22:24 编辑

if(i%2==0)
                        {      
                        System.out.println("i="+" "+i);
                        i++;   //这个i++应该在这个大括号外面 不然 就死循环了
                        }
回复 使用道具 举报
cz萑 中级黑马 2014-12-13 22:22:39
8#
第二个while里的if()中i++,要写在if的外面
回复 使用道具 举报
爱卿 发表于 2014-12-13 22:22
if(i%2==0)
                        {      
                        System.out.println("i="+" "+i);

  明白了,弄了半天,看着也输出结果,就是会陷入死循环中。
回复 使用道具 举报
第二个while循环里面,但i=奇数时没有自增,条件始终成立。所以死循环。
回复 使用道具 举报 1 0
少了个括号,第二个循环尾加上continue。
回复 使用道具 举报
pj1988 中级黑马 2014-12-14 10:56:59
12#
从第一个while循环结束后i==102,当i的值为102时进入第二个while循环,满足条件,然后进入if进行判断为true,再执行if里的内容,当i的值自增为103时,进入第二个while继续判断,满足条件,再次进入if进行判断,结果为false,所以不执行if里的内容,这时,i的值没有任何变化,还是为103,然后103一直在第二个while循环里判断,所以陷入死循环。如果要求1-111之间的偶数,只需把第二个while循环的i++放在if大括号外面,当然,如果求奇数再改变第二个while里if的判断条件为i%2==1就搞定。
回复 使用道具 举报
pj1988 中级黑马 2014-12-14 10:58:52
13#
从第一个while循环结束后i==102,当i的值为102时进入第二个while循环,满足条件,然后进入if进行判断为true,再执行if里的内容,当i的值自增为103时,进入第二个while继续判断,满足条件,再次进入if进行判断,结果为false,所以不执行if里的内容,这时,i的值没有任何变化,还是为103,然后103一直在第二个while循环里判断,所以陷入死循环。如果要求1-111之间的偶数,只需把第二个while循环的i++放在if大括号外面,当然,如果求奇数再改变第二个while里if的判断条件为i%2==1就搞定。
回复 使用道具 举报
第二个判断语句有问题
回复 使用道具 举报
当执行完第一个while循环,i=102会继续执行第二个while循环,此时i=103了;当i=103时,不会执行if里面的语句,所以i的值一直为103,所以不会跳出第二个while循环。把i++写在if语句外面就可以了
回复 使用道具 举报
因为第二个循环,你i=103的话就一直是103,应该在if外加i++
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马