Условный оператор для инициализации одной из двух переменных - PullRequest
0 голосов
/ 22 апреля 2020

Я знаю, что можно сделать что-то подобное, чтобы инициализировать целочисленную переменную в зависимости от заданного условия c:

boolean myCond = getCond();
int x = myCond ? 13 : 42;

Но есть ли способ использовать условную операцию для выбора одной из двух переменных ? Эквивалент следующего if-else

int x = 0;
int y = 0;

if(myCond){
   x = 13;
}
else{
   y = 13;
}

Ответы [ 3 ]

3 голосов
/ 22 апреля 2020

Просто присвойте начальное / другое значение в зависимости от условия:

int x = myCond ? 13 : 0;
int y = !myCond ? 13 : 0;

Вы должны обязательно назначить переменные, чтобы использовать их вообще (если они являются локальными переменными).


Полагаю, вы могли бы сделать это следующим образом:

int unused = myCond ? (x = 13) : (y = 13);

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

1 голос
/ 22 апреля 2020

Чтобы добавить к другим ответам: причина, по которой вы не можете написать назначение типа

   (cond ? x : y) = 13;   

, заключается в том, что язык Java говорит, что вы не можете.

Если вы посмотрите на определение оператора присваивания в 15.26, левая часть оператора присваивания довольно ограничена в том, что разрешено. Немного упрощая обсуждение, это либо идентификатор (т. Е. Присвоение простой переменной), доступ к массиву (т. Е. Присвоение элементу массива), либо доступ к полю (т. Е. Присвоение переменной-члену).

1 голос
/ 22 апреля 2020

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

int x = 0;
int y = 13;

if(myCond){
   x = 13;
   y = 0;
}

...