2015-05-09 4 views
2

Я изо всех сил, чтобы превратитьПочему я не могу заменить оператор с условным оператором (? :)?

private PlaneClass preferredClass; 

if (preferredClass == PlaneClass.FIRST_CLASS) 
    preferredClass = PlaneClass.ECONOMY_CLASS; 
else 
    preferredClass = PlaneClass.FIRST_CLASS; 

в

preferredClass == PlaneClass.FIRST_CLASS ? 
       preferredClass = PlaneClass.ECONOMY_CLASS 
           : preferredClass = PlaneClass.FIRST_CLASS; 

Условный-заявление компилирует. Условный оператор не. (Сообщения об ошибках: 1. Тип несоответствия: невозможно преобразовать из PlaneClass в boolean 2. Синтаксическая ошибка на токене «=» и еще две ошибки ...). Где я неправ?

ответ

10

синтаксис:

condition ? value1 : value2; 

не

condition ? statement1 : statement2; 

Условный оператор является выражением, а не утверждение. Он не выполняет такие операторы, как оператор if: он возвращает значение.

Что вы имеете в виду:

preferredClass = (preferredClass == PlaneClass.FIRST_CLASS ? 
      PlaneClass.ECONOMY_CLASS : PlaneClass.FIRST_CLASS); 
+1

Это основное различие, которое я как-то упускается из виду. Благодарю. – enhancedJack

1
preferredClass = preferredClass == PlaneClass.FIRST_CLASS ? PlaneClass.ECONOMY_CLASS : PlaneClass.FIRST_CLASS; 

будет делать трюк

1

Это должно быть

preferredClass == PlaneClass.FIRST_CLASS ? 
      PlaneClass.ECONOMY_CLASS 
          : PlaneClass.FIRST_CLASS; 
Смежные вопросы