2016-12-12 3 views
1
boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

boolean - это истина или ложь.Java, смущенный этим синтаксисом

! = не

|| = Или

& & = и

, но я до сих пор не понимаю, этот синтаксис ... может кто-нибудь объяснить мне, что этот синтаксис excactly делает?

+0

Что вы не понимаете по этому поводу? Это делается так, как вы писали. Вы спрашиваете, что делает эта конкретная линия? – ItamarG3

+0

Да какая конкретно линия? – Augurkturk

ответ

4

Просто препарировать:

Есть некоторые сравнения, такие как

5 > 2 ... true 

3 < 5 ... true 

Те два стягиваются с помощью & &; так верно & & верно -> истинный

1 < 8 ... true 

Это один к по ИЛИ остальных; так что мы получаем истинное или правда -> правда

Наконец, не (истина) -> ложь

Короче говоря: если вы не понимаете всю картину, разбить его на части вы понимаете; а затем снова вытащите их.

Редактировать: и, конечно, порядок, который я использую в своих объяснениях, не является тем, что происходит на самом деле. Там сначала оценивается 1 ; и как это верно; и «true или X» всегда истинно, другие сравнения даже не вычисляются.

+0

tnx это яснее! – Augurkturk

+0

Вы начинаете с двух выражений, которые вообще не оцениваются. –

1

Оператор не ! отрицает, что перед ним. В этом случае !() будет производить противоположное тому, что находится внутри скобки.

|| или оператор проверяет, действительно ли одно условие или другое. По крайней мере, должно быть истинно условие возврата истины.

Наконец, && проверяет обе стороны условного оператора, чтобы убедиться, что они оба являются истинными, и оба из них должны быть истинными для продолжения.

1
boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

Разберем это способ Java делает:

  • boolean: Здесь приходит логическое значение, т.е. true или false.
  • riddle: Переменная riddle объявлена ​​как boolean.
  • =: Булева переменная riddle инициализируется выражением справа.
  • !(...): Он возвращает логическое, отрицательное (= противоположное) логическое значение в круглых скобках.
    • Внутри скобок является bool1 || bool2 выражением, где || является "lazy OR" оператором. Если верно bool1, нет необходимости оценивать bool2.
    • bool1 - 1 < 8, что верно.
    • bool2 не оценивается
    • bool1 ||bool2 истинно
  • !(...) ложно
  • riddle инициализируется false

Ни в какой момент времени являются 5 > 2 или 3 < 5 оценены. Eclipse предупреждает, что эти 2 выражения являются «мертвым кодом» и могут быть удалены.

Все выражение может быть:

boolean riddle = !(1 < 8 || (5 > 2 && doSomethingVeryDangerous())); 

результат будет таким же, и ни один вызов метода не произойдет вообще.

0

Проблема, с которой вы сталкиваетесь, заключается в том, что вы инициализируетесь одновременно с проверкой, если это true или false. Вы не можете сравнить boolean с integer. Если вы хотите это сделать, вам нужно решить его по-другому, перейдя из одного типа данных в другой или включив в ваше решение другую переменную. То, как вы должны решить вашу проблему синтаксиса является разделив его так:

Как ты это сделал ...

boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

Как потенциально решить ...

boolean riddle; 

"...some code to decide if riddle will be true or 
false and assign it to the variable riddle..." 

if (riddle == true){ 
"...do some code here..."; 
} 

if (riddle == false){ 
"...do some code here..."; 
} 

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

int riddle; 

"...some code to decide what value riddle will 
have and assign it to the variable riddle..." 

if (riddle < 8 && riddle > 1){ 
    "...do some code here..."; 
} 
Смежные вопросы