Использование оператора == дважды в операторе if - PullRequest
0 голосов
/ 25 ноября 2010

Это нормально делать в Java, это работает?

if (turtles.get(h).getX() == turtles.get(g).getX() == 450) { 
    //stuff here
}

По сути, я хочу проверить, совпадает ли значение X с Y, и это значение должно быть 450.

Ответы [ 6 ]

5 голосов
/ 25 ноября 2010

Нет. Что вы там ожидаете?

"a == b" оценивается как логическое значение, поэтому "int == (int == int)" будет оцениваться как "int == логическое", и вы не можете сравнивать и int и логическое значение.

Кроме того, какую логику вы пытаетесь сделать здесь? if ((a == b) && (b == c))

4 голосов
/ 25 ноября 2010

Нет, это не так. Это потому, что результат a == b является логическим. Если вы делаете a == b == c, вы сначала сравниваете a == b, который вернет true или false, а затем сравниваете это значение истинности с c.

Не то, что вы хотите сделать, обычно!

Обратите внимание, что этот трюк может работать для назначения, потому что результат a = b равен b (новое значение a), что означает, что a = b = c или даже (a = b) == c пригодятся время от времени.

2 голосов
/ 25 ноября 2010

Или избегайте всех менее читаемых (и подверженных ошибкам) ​​повторений с помощью вспомогательного метода ...

public boolean areEqual( int a, int b, int c )
{
    return ( a == b ) && ( b == c ) ;
}
2 голосов
/ 25 ноября 2010

Нет.Это так же, как (turtles.get (h) .getX () == turtles.get (g) .getX ()) == 450 - «несопоставимые типы».if(turtles.get(h).getX() == 450 && turtles.get(g).getX() == 450).

1 голос
/ 25 ноября 2010

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

0 голосов
/ 25 ноября 2010

Нет, это не будет работать, как объяснено в других постах.Но вы могли бы сделать

if (turtles.get(h).getX() - turtles.get(g).getX() + 450 == 0) 
...