2013-12-16 5 views
-7

Довольно просто, было быJava логические операторы

if(clickedButton == button0 || button1 || button2 || button3 || button4 || button5 || button6 || button7 || button8 || button9) 

возвращение true если я нажал button0, button1 или button2 и т.д.? Кроме того, я не понимаю, почему if(clickedButton == (button0 || button1 || button2) ... и т.д. также не работает. Это одно и то же (проверка истины или ложности на JButton) или что-то еще полностью. В основном я просто возился с круглыми скобками, поэтому, когда эта мысль ударила меня, я попробовал, и я не понимаю, почему это не работает.

+5

Почему бы вам не попробовать? –

+2

Вам нужно '==' для каждого сравнения –

+0

Это не похоже на ситуацию, когда вы даже хотите использовать || операция. Вероятно, вам нужна другая 'if' 'else if' для каждой ситуации, где каждой кнопке назначается другое действие. –

ответ

7

Нет, это будет ошибка компиляции, поскольку она парсинга как

if ((clickedButton == button0) || (button1) || (button2) ... 

и кнопки не являются булевыми.

Вы должны сделать:

if (clickedButton == button0 || clickedButton == button1 ... 

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

if (Arrays.asList(buttons).contains(clickedButton)) { 
    ... 
} 

Или, если ваши кнопки сохраняются в ArrayList (или любой List), это просто

if (buttons.contains(clickedButton)) { 
    ... 
} 
+0

+1 для решения массива/списка –

+0

+1: Хорошее решение, которое _does_ condense на if-statement, что минимизирует вероятность ошибок/опечаток! –

+0

Хммм, 'Arrays.asList ...' требует последовательного сканирования для каждого вызова - 'Set' будет более элегантным. –

2

Короткий ответ - нет. Вы должны сделать

if(clickedButton == button0 
    || clickedButton == button1 
    || clickedButton == button2 
    || clickedButton == button3 
    || clickedButton == button4 
    || clickedButton == button5 
    || clickedButton == button6 
    || clickedButton == button7 
    || clickedButton == button8 
    || clickedButton == button9) 
2

No.

Логическое выражение, как ожидается, между логических операторов. Я предполагаю в вашем примере, что button1, ..., button9 не имеют логического типа.

Таким образом, это приведет к исключению.

0
  1. Вам нужно сравнить каждую переменную отдельно

    if(clickedButton == button0 || clickedButton == button1 .....)

  2. Использование equals() вместо ==

Причина

equals() метод присутствует в классе java.lang.Object, и ожидается, что он будет проверять эквивалентность состояния объектов !. Это означает, что содержимое объектов. В то время как ожидается, что оператор == будет проверять фактические экземпляры объекта одинаковыми или нет.

+0

Это превосходно подходит для использования кнопок '==' для сравнения. –

+0

Для кнопки это нормально. Я просто помню, используя equals() лучше –

+0

Конечно, полезно запомнить 'equals()' при необходимости (есть так много вопросов, когда ассер неправильно использует '==' для сравнения строк). Хотя в этом случае вам не нужно, ваше упоминание об этом, безусловно, хорошо. –

1

Почти наверняка лучший подход заключается в изменении вашего слушателя действий (или его эквивалента). Проверка источника события имеет тенденцию приводить к беспорядочному и хрупкому коду.

0

Дополнительная примечание стороны: если тип вашей кнопки - это все, что можно использовать в инструкции-переключателе, например. ints, longs, String, enums (и ваши кнопки button0, ..., button9 постоянные), вы можете использовать (часто обескураженный) осень-через механизм:

switch(clickedButton) { 
    case button0: 
    case button1: 
    case button2: 
    case button3: 
    case button4: 
    case button5: 
    case button6: 
    case button7: 
    case button8: 
    case button9: 
    // do whatever you wish 
} 

В этом случае последний (с комментариями) линии будет выполняться всякий раз, когда clickedButton является одним из button0, ..., button9.

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