java文件中public class Main{
  public static void main(String[] args) {
    int n = 100;
    for(;;)  {
    }
    System.out.println(n); 永远不会执行
  }
}public class Main{
  public static void main(String[] args) {
    int n = 100;
    while(n>0);
      System.out.println(n);
  }
}
上面二段程序中,为什么第二段输出会运行,第一段就是错的呢,thanks

解决方案 »

  1.   

    第一段相当于while(true),直接编译成死循环,,第二段编译器不知道n是否会改值,认为System.out.println(n);有执行的机会,每次都判断
      

  2.   

    第二段相当于while(true)陷入死循环第一段for(;判定条件;)相当于for(;false;)
      

  3.   

    while(n>0);相当于while(true){;}里面有个;号,相当于空语句,不执行,所以会往下继续执行,而第一个死循环,一直在里面执行,不往下执行
      

  4.   

    for循环的要素(赋初值;判断结束的条件;变量变化){循环体}其中()中的条件缺一不可;while循环中有循环条件且条件满足循环条件当然可运行
      

  5.   

    for(;;){
       .......
    }
    你的for循环多了个};while(n>0){
        .....
    }
    你的while(n>0)旁边加了;   是结束循环的意思。
      

  6.   

    这个for循环和while循环,其实是一样的,只不过输出语句一个放到方法体里面,一个放到方法体外面,方法体里面的可以执行的死循环。在死循环后面,是不可达到的,故而编译是不通过的。
      

  7.   

    你第一段程序,编译会出错,for循环括号里面包括()n初始值、n范围、n迭代部分。
    你看你少了什么东西吧。
    你第二段程序,拾死循环,你n初始值是100。而while循环的条件却是大于0.这不是死循环是什么。
      

  8.   

    建议好好看看for  while  这些语法的基础
      

  9.   

    http://www.happyalaric.com资源下载区 去下点电子书看看
      

  10.   

    怎么都在答非所问哦 , 第一段那个System.out.println(n);  不在for语句块里面,for又是死循环,怎么输出呢,你这样就能了吧 public static void main(String[] args) {
      int n = 100;
      for(;;) {
    System.out.println(n);
      }
        }
      

  11.   

    我试了一下,结果是第一个编译就已经出错了,第二个编译可以过,执行的时候是死循环。
    原因大概是,楼主写的第一个for循环三个条件都省略了,编译器能检查出来。
    我试了一下,如果给for循环加上结束条件编译就能通过了。
      

  12.   

    for循环的(定义; 继续循环的条件;步进);  
    没有继续循环的条件, 当然会报错。
      

  13.   

    for循环第二个必须是判断boolean类型
      

  14.   

    怎么有人会认为第二个无法执行呢、、、java是zbrush老师教的么、、、这个相当于while(true),一直执行,想跳出就来个break,我经常这样用。
      

  15.   

    那是死循环的一种写法,第一个报错是因为死循环导致for下面的System.out.println(n); 语句执行不了,编译器才报错的。第二种语句写在死循环内部,会执行编译器不报错。
      

  16.   

    第一个for循环本身函数体是没错的,空参数(约束条件)的for等价于
    for(;true;) {}是死循环的一种写法。
    由于for循环没有结束条件,所以写在for之外的
    “System.out.println(n); 永远不会执行 ”编译器指针永远在死循环里而无法达到故编译错误。第二段等价于while(true);也是一种死循环的写法,因为n>0在当前函数内是表示“永真”,且没有循环
    结束条件,同时,由于分号的原因,程序会在当前语句执行死循环。
    至于后面的“System.out.println(n); ”编译通过的问题,个人比较偏向一楼的“第二段编译器不知道n是否会改值,认为System.out.println(n);有执行的机会,每次都判断”这个解释。结论:第一个是编译错误,第二个一直执行死循环,无输出。
      

  17.   

    正确答案:
    第一个肯定是无限循环不能,绝对走不到输入那一句。第二个看起来是无限循环,但是可以更改n的值(内存中修改),跳出循环,进行输出。So:
    第一个编译不过,第二个可以编译通过。
      

  18.   

    单纯对比LZ的代码片段来说://编译器会提示错误
    //因为这里是是一个死循环,System.out.println(n);这句是不可能被执行的
    public class Main{
      public static void main(String[] args) {
      int n = 100;
      for(;;) {
      }
      System.out.println(n); 
      }
    }//while(n>0)参照上下文相当于:while(true),可认为是一个死循环
    public class Main{
      public static void main(String[] args) {
      int n = 100;
      while(n>0);  //注意这行,因为断句符号";"在此行,执行时不会有输出,因为是一个死循环
      System.out.println(n);
      }
    }