黑马程序员技术交流社区

标题: 求解while的一个小问题 [打印本页]

作者: 林其荣    时间: 2013-1-11 15:17
标题: 求解while的一个小问题
本帖最后由 林其荣 于 2013-1-11 23:57 编辑
  1. <p>
  2. public void show(){
  3.   boolean bo=true;
  4. while(bo){}
  5.    System.out.println();
  6.   while(true){}
  7.   System.out.println();

  8. }

  9. 为什么在while(true){}的情况下后面的输出语句会影响后面的语句错误
  10. 而在while(bo)加入参数的情况下就不影响后面的语句呢
  11. while(true)和while(bo)除了while(bo)参数可以改变参数值结束循环外他们又有什么区别
  12. </p><p> </p>
复制代码

作者: 詹卓锋    时间: 2013-1-11 16:55
你写while(true){}  你的括号内的条件一直为true,虚拟机会一直执行,“一直执行”就是说虚拟机根本到不了在while大括号的语句( System.out.println(); ),虚拟机会提示“无法访问语句”,所以:   在while(true){}的情况下后面的输出语句会影响后面的语句错误。

条件为true的错误.jpg (6.49 KB, 下载次数: 42)

条件为true的错误

条件为true的错误

作者: 王圳伟    时间: 2013-1-11 16:56
详细的不知道你问嘛,while 条件为(true),你觉得有意思吗? while 循环判断boolean 为false才跳出循环,给一个固定值true(或者说true为常量) 不是自找没趣吗?
我大概知道你意思了,条件你给true程序在永远循环,程序是不会执行到下面一句,所以系统给警告
作者: 胡勇敏    时间: 2013-1-11 17:04
如果while(ture)你的机器跑到冒烟(毕老师的解释是这么说的)也跳不出这个循环了,后面的代码压根没机会执行了。所以会提示有访问不到的代码。
作者: 李桐    时间: 2013-1-11 17:06
无限循环啊 编译器是一行一行读取的 如果单做出来一个变量,编译器是看不出来问题的,但如果放在一行里就不行了
作者: 黑马-小龙    时间: 2013-1-11 17:10
while(do)的时候,do是一个变量
while(ture)的时候,ture是常量,无线死循环当然会循环
作者: 张云杰    时间: 2013-1-11 19:19
public class Test {
        public static void main(String[] args) {
                boolean flag = true;
                while(flag){ //这里为true的时候 无限死循环语句
                        while(true){ //然后又进入一个无限死循环语句
                                System.out.println("aaaa");
                                break; //如果这里和下面没加break的话, 直接报错 ,这里加break的意思是说 跳出当前的while(true)的语句
                        }
                        break; //这里是跳出while(flag)语句 ,记住, while语句为true的时候 如果没有手动跳出,它的执行结果永远都是死循环
                }
        }
}

作者: 陈丽莉    时间: 2013-1-11 20:26
      是这样的,while的用法是while(判断语句){循环中执行语句},你的程序是不是把要放在循环执行的语句放在大括号外面了?

关于为什么while(bo)不报错而while(true)报错:
    是因为bo是可以通过赋值改变的,比如bo=false;这样就不会产生死循环。所以当循环条件为可更改的时候,即使你执行了空循环,虚拟机也放任了。(因为它没有具体到去程序中判断bo有没有在适当时机被改为false);
    而while(true)没有break是会进入死循环的,(break是关键字,很好判断)那么不仅程序的执行无法自动停止,该语句后面的语句也无法执行到,所以报错了。

while(true)和while(bo)它们的区别?
    除了可以改变bo的参数来结束循环,在判断语句上就没什么区别了。




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