Помните, что условие while l oop является условием продолжения l oop, что означает, что когда условие ложно, l oop останавливается.
Если вы отрицаете условие во втором коде:
!(i<100 & i%2==0)
Использование закона Де Моргана , что эквивалентно:
i>=100 | i%2!=0
Или словами:
i
больше или равно 100 ИЛИ i
нечетно.
Это условие остановки, пока l oop. Ну, i
изначально равен 1, что странно, поэтому l oop останавливается, даже не выполнив ни одной итерации.
Другими словами, вы не можете переписать первый код как второй код. Они не эквивалентны. То, что входит в условие if
, входит в условие if
. Вы не можете «слить» его в условие while
, потому что они предназначены для разных целей.
Я также рекомендую &&
для логического И, так как он только оценивает правильный операнд при необходимости. Для получения дополнительной информации см. В чем разница между & и && в Java?