黑马程序员技术交流社区

标题: while语句的循环问题 [打印本页]

作者: 陈强fly    时间: 2014-12-13 22:09
标题: while语句的循环问题
本帖最后由 陈强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++;
                        }
                }

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


作者: chudaming213    时间: 2014-12-13 22:10
问什么呢


作者: zmhlnrs    时间: 2014-12-13 22:11
你这个是想表达什么呢?
作者: 爱卿    时间: 2014-12-13 22:15
这片代码没啥问题啊。 一定要说有问题的话 最后少一个大括号。。
作者: boycechan    时间: 2014-12-13 22:18
楼主这是想要表达什么呢?
作者: 董晗    时间: 2014-12-13 22:20
当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
本帖最后由 爱卿 于 2014-12-13 22:24 编辑

if(i%2==0)
                        {      
                        System.out.println("i="+" "+i);
                        i++;   //这个i++应该在这个大括号外面 不然 就死循环了
                        }
作者: cz萑    时间: 2014-12-13 22:22
第二个while里的if()中i++,要写在if的外面
作者: 陈强fly    时间: 2014-12-13 22:27
爱卿 发表于 2014-12-13 22:22
if(i%2==0)
                        {      
                        System.out.println("i="+" "+i);

  明白了,弄了半天,看着也输出结果,就是会陷入死循环中。
作者: Honelyboy    时间: 2014-12-13 22:30
第二个while循环里面,但i=奇数时没有自增,条件始终成立。所以死循环。
作者: Mydream524    时间: 2014-12-14 10:11
少了个括号,第二个循环尾加上continue。
作者: pj1988    时间: 2014-12-14 10:56
从第一个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
从第一个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就搞定。
作者: chen578157939    时间: 2014-12-14 10:59
第二个判断语句有问题
作者: I空空    时间: 2014-12-14 11:28
当执行完第一个while循环,i=102会继续执行第二个while循环,此时i=103了;当i=103时,不会执行if里面的语句,所以i的值一直为103,所以不会跳出第二个while循环。把i++写在if语句外面就可以了
作者: 我只是一只菜鸟    时间: 2014-12-14 12:38
因为第二个循环,你i=103的话就一直是103,应该在if外加i++




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