拳击循环和if语句

时间:2013-08-29 14:20:09

标签: java

这个代码示例应该在应用程序启动后大约一秒打印出“永远不会被打印”的文本,但是文本说这种情况从未发生过。

也许是因为我的积木可能不正确的拳击,但我认为这不是原因。

class ThreadTest
{
    public static boolean b = false;

    public static void main(String args[]){

        new Thread(){
            @Override public void run(){
                try{
                    Thread.sleep(1000);
                }
                catch(Exception e){}

                b = true;
            }
        }.start();


        while(true)
            if(b)
            {
                System.out.println("will never be printed");
                break;
            }
}

}

请说这是非常疯狂还是我只是犯了大错。

看起来好像没有人读过这个问题。问题是“永不打印的行应在一秒钟后打印,但不是”。你们都只是在写一些与这个问题毫无关系的东西。 再说一次:为什么这条线不执行?!!!! :

System.out.println("will never be printed");    

4 个答案:

答案 0 :(得分:1)

在这种情况下,他们是平等的。但是为了便于阅读,后者更可取。

if(a)
   while(b)
     if(c) {

     } 

就像:

if(a) {
    while(b) {
      if(c) {

     }
   }
}

<强> BUT

if(a)
   blabla;
   while(b)
     if(c) {

     } 

喜欢:

if(a) {
   blabla;
   while(b)
     if(c) {

     } 
}

答案 1 :(得分:1)

没有区别,但第二个更清楚

答案 2 :(得分:1)

在这种情况下它们都是相同的,但我们更喜欢使用大括号,即使条件语句只有单个语句,以避免一些调试问题,这些问题可能会发生很小的错误。

你的第一个代码就是这样的第二个代码。

top:
while(true)  // Had only one if statement
    if(...)  // Had only one while statement
        while(...)  // Had only one if statement
            if(...)  // It can have more code since it uses braces
            {
                //code
                break top;
            }

由于编译器会在编译时自动添加大括号,因此它将成为第二个代码的反编译。

答案 3 :(得分:0)

这两种情况是相同的,但如果您有这种情况则不会是这种情况,例如:

top:
while(true)
    if(...)
        while(...)
            if(...)
            {
                //code
                break top;
            }
        //more code

比较
top:
while(true)
{
    if(...)
    {
        while(...)
        {
            if(...)
            {
                //code
                break top;
            }
        }

        // more code
    }
}
当然,正如大家所说,第二个也更清晰。我建议总是在他们自己的一行中使用“{”和“}”,与打开它们的语句在同一列中

例如:

像那样

if(condition)
{
   //code
}

if(condition){
  code
}

并且肯定不是

   if(condition)
   {
     // code
}