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
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
.......
}
你的for循环多了个};while(n>0){
.....
}
你的while(n>0)旁边加了; 是结束循环的意思。
你看你少了什么东西吧。
你第二段程序,拾死循环,你n初始值是100。而while循环的条件却是大于0.这不是死循环是什么。
int n = 100;
for(;;) {
System.out.println(n);
}
}
原因大概是,楼主写的第一个for循环三个条件都省略了,编译器能检查出来。
我试了一下,如果给for循环加上结束条件编译就能通过了。
没有继续循环的条件, 当然会报错。
for(;true;) {}是死循环的一种写法。
由于for循环没有结束条件,所以写在for之外的
“System.out.println(n); 永远不会执行 ”编译器指针永远在死循环里而无法达到故编译错误。第二段等价于while(true);也是一种死循环的写法,因为n>0在当前函数内是表示“永真”,且没有循环
结束条件,同时,由于分号的原因,程序会在当前语句执行死循环。
至于后面的“System.out.println(n); ”编译通过的问题,个人比较偏向一楼的“第二段编译器不知道n是否会改值,认为System.out.println(n);有执行的机会,每次都判断”这个解释。结论:第一个是编译错误,第二个一直执行死循环,无输出。
第一个肯定是无限循环不能,绝对走不到输入那一句。第二个看起来是无限循环,但是可以更改n的值(内存中修改),跳出循环,进行输出。So:
第一个编译不过,第二个可以编译通过。
//因为这里是是一个死循环,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);
}
}