当我运行此代码时,我收到无法解决的声明错误。但是如果我将false改为true(在第二次),则输出为:“1 0”并继续执行。 里面发生了什么???
int m=2;
while (m >0)
{
m =m -1;
System.out.println(m);
} while (false);
输出:“错误:无法访问的声明”
但是,如果,
int m=2;
while (m >0)
{
m =m -1;
System.out.println(m);
} while (true);
输出:“1 0”
提前致谢...
答案 0 :(得分:5)
你的例子都很奇怪,我的问题是......
while (m >0)
{
m =m -1;
System.out.println(m);
} while (false);
......实际上意味着
while (m >0)
{
m =m -1;
System.out.println(m);
}
// another while statement
while (false)
; // loop's body - empty statement
因此,永远不会到达第二个while
语句的主体(分号=空语句)。
如果你把true
放在那里,你已经无限循环了 - 不确定这是不是你的目标。
我相信您将do {...} while(...);
语法与while(...) {...}
混淆了,并创造了两者的混合。
答案 1 :(得分:2)
让我们稍微格式化你的代码:
int m = 2;
while (m > 0) {
m = m - 1;
System.out.println(m);
}
while (false)
;
如您所见,此处有两个循环,首先是while (m > 0)
和第二while (false)
。让我们关注第二个循环
while (false)
;
这里有两个错误
即使此循环中的条件可以被评估为 true ,它也没有执行指令(分号为空之前的指令)所以这个循环相当于
while (false){
//nothing
}
现在您看到有关无法访问的语句的错误的原因是因为根据Java Language Specification 14.21
如果由于无法访问语句而无法执行该语句,则为编译时错误。
现在,如果你将这个循环中的条件更改为while (true)
此循环内部无法访问语句的问题将消失,但会发生两件坏事
你最终会创建无限循环,除了占用处理器时间之外什么也不做。
while (true){
//will do nothing forever
}
因为这个无限循环指令放在它之后无法访问,所以像
while (true){
//will do nothing forever
}
System.out.println("foo");//unreachable
将导致与以前相同的错误。