2015-05-04 2 views
0

У меня булева переменная, инициализированная ложью.Уточнение на "!" оператор в java

Теперь в, если заявление, пусть мой, если условие следующее:

if(!collision) 

это означает, что если оператор будет выполняться, если столкновение противоположно тому, что инициализируется? Значение, будет ли оно выполняться, когда !collision возвращает true?

Просто немного смущен, так как я инициализируется его ложным, и я хочу это, если заявление работать, когда collision является false, но не знаю, если !collision правильный способ сделать это или нет.

Код в соответствии с запросом. Все еще запутался, каково будет состояние. Я столкнулся с ложью. В результате я хочу, чтобы оператор выполнялся, когда он является ложным. Должен ли я писать if (collision) или if (! Collision)?

boolean collision = false; 
    boolean winner = false; 

    while(!winner){ 
     //Main loop where user will be able to move the ships and try to destroy the ship 
     //boolean shipAlive = true/false; YET TO ADD! 
     //if(!shipAlive) -> winner = true; YET TO ADD! 

     //movement of ships 
     if(!collision){ 
      System.out.println("Player 1: L, R, or S? (L = Left, R = Right, S = Stay)"); 
      String p1Input = IO.readString(); 
      int k = movement(p1Input, player1); 
      while (k == 1){ 
       System.out.print("Error! Enter either L, R or S: "); 
       p1Input = IO.readString(); 
       k = movement(p1Input, player1); 
      } 
     } 

     collision = fireProjectileUp(); 
     if(collision){ 
      winner = true; 
     } 
+1

Это будет работать, и это достаточно правильный способ сделать это. – Sandeep

+0

Можете ли вы показать больше кода? –

+0

Использование '! Collision' кода внутри условия будет выполняться, когда' collision = false', не имеет значения, с чем вы его инициализировали, он проверит значение в этот момент. – wallek876

ответ

2

Да, это правильный способ сделать это:

В if (!someBoolExpr) { ... }, то «тогда пункт» будет работать, если someBoolExpr == false.

Смотрите JLS §15.15.6: Logical Complement Operator ! для получения дополнительной информации:

Значение одинарного логического выражения комплемента верно, если (возможно, преобразованное) значение операнда является ложным, и ложным, если (возможно, преобразованным) значение операнда верно ,

0

! означает нет, поэтому ваше выражение будет переведено на если (NO столкновения).

Проверьте, пожалуйста, documentation.

1

! представляет НЕ на Java. Так что если у вас есть что-то вроде

if(!true) { 
//doSomething 
} else { 
//Something else --- This is executed. 
} 

if(!false) { 
//doSomething --- This is executed. 
} else { 
//Something else 
} 

истины и лжи является конечным результатом ваших операций сравнения

0

Да, ваше заявление, если будет выполняться при столкновении ложно.
! False возвращает true

0

Вы задали вопрос, но я подозреваю, что для вас это проблема XY. Вы спросили о разъяснении оператора !, а затем продолжили объяснять, что такое операция not.

При построении ваших условий вы хотите манипулировать логикой, чтобы она оценивалась как истина , если вы тоже этого хотите. Например, я хочу, чтобы что-то запускалось, если произошло столкновение.

if(collision) 

Простой. Это потому, что он будет оцениваться до true, если вы тоже этого хотите. Теперь вам нужно что-то запустить, если они не были столкновением.

if(!collision) 

Опять же, он оценивает значение true, если столкновение является ложным. Или, , если вы тоже этого хотите. Трюк здесь заключается в том, как выражать то, что вы хотите, таким образом, что понимает компилятор, и это делается с помощью логических выражений, которые разрешают некоторое логическое значение true или boolean false.

EDIT

Просто упаковывают, ! оператор просто противоположностью значения. !true является false, !false является true. Следуя тому, что я объяснил выше, вы можете объединить эти знания для создания своего решения.

0

Если выполняется (! Collision), то в первую очередь проверяется значение столкновения. Предположим, что это «ложь». Затем ! оператор преобразует его в true. напротив ложных. Тогда значение равно «true», поэтому если оператор выполнит свой блок кода.

Смежные вопросы