2012-06-13 4 views
0

Привет У меня есть следующий код:Weird JAVA Boolean Evaluation Выпуск

boolean result = someexpression(); 

      if(!result) 
      { 
      System.out.println("False..."); 
      } 
      if (result); 
      { 
       System.out.println("True"); 
      } 

Он печатает как (False и True) Я также попытался использовать такие вещи, как

 if(result==true) 

но то не кажется, что делают Хитрость. Независимо от того, какое значение переменной оно просто входит в состояние. Я использую eclipse, и это происходит только в определенной части.

+0

wahh waha wavee .. хороший .. –

+0

Возможно, вы захотите установить плагин FindBugs для Eclipse. Я думаю, что это обнаружит это. http://findbugs.cs.umd.edu/eclipse/ –

ответ

8
if (result); 

Удалите ; в конце этой строки.

С ; это означает «если result - true, то ничего не делать». Блок, содержащий следующий оператор, не является частью if и всегда будет выполнен. Это точно так же, как это:

if (result) // if result is true 
    ;   // then do nothing 

System.out.println("True"); // is always executed 
+5

После всех манипуляций и изменений. Его удивительно, как лишение сна может заставить вас упустить эти проблемы. Спасибо за мгновенный ответ. – MistyD

+0

это своего рода «ошибка», которую я бы хотел, чтобы компилятор поймал, хотя я понимаю, почему этого не происходит. Это также является одной из тех очень сложных ошибок, которые можно увидеть в вашем собственном коде! – David

+0

@David Попробуйте статические инструменты проверки кода, такие как Checkstyle, Findbugs или PMD. Скорее всего, они поймут такую ​​ошибку. – Jesper

7

У вас есть двоеточие изгоев в конце вашего оператора if.

if (result); 

Это делает ваш код вычисляться

if (result) { 

} 
{ 
    System.out.println("True"); 
} 

где вторая пара {} обозначает блок кода, который всегда запускается на выполнение, так как это не входит в если блока управления больше. Так что избавитесь от этой полуколоки (я полагаю, это не то, что вы хотели там положить)!