Почему это работает, но не так, как я ожидал? Java условный оператор - PullRequest
1 голос
/ 07 марта 2020

Я учусь Java и делал это маленькое отображение времени. Затем эта часть стала хитрой:

int second = 66;
second = ((second >= 0) && (second < 60) ? second : (second % 60) & (minute += second / 60));

Верните секунду, если между 0 и 60, иначе верните секунду% 60 и увеличьте минуту. Я ожидал, что это сработает, но вывод секунды: 1

Без

(minute += second / 60)

, и это сработало. Измените 60 на что угодно и посмотрите также значение секундных изменений. Что с ним не так?

1 Ответ

4 голосов
/ 07 марта 2020

Ваш & выполняет побитовое & нового значения minute с second % 60, что вряд ли будет хорошей идеей.

Учитывая, что вы хотите побочный эффект Я бы настоятельно рекомендовал не использовать условный оператор здесь - просто используйте оператор if:

if (second > 60)
{
    minute += second / 60;
    second = second % 60;
}

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

Урок, который нужно здесь извлечь, заключается в том, что условный оператор используется для вычисления значения . В вашем случае вы действительно заинтересованы в выполнении действий вместо вычисления значения: «если переменная second еще не нормализована, внесите изменения как в second, так и minute». Это должно заставить вас думать об операторе if, а не об условном операторе. Существует множество случаев, когда вы можете использовать условный оператор, но было бы яснее использовать оператор if.

...