Булевы логические операторы для управления потоком в java - PullRequest
1 голос
/ 01 февраля 2020

Разве мы не можем использовать логические логические операторы (такие как &, |,!, ^ Et c) в java элементах управления потоком (для l oop, тогда как l oop et c)? ??

Я хочу напечатать все четные числа от 1 до 100. Поэтому я использовал ниже два исходных кода.

import java.util.*;
class Example{
    public static void main(String args[]){
        int i=1;
        while(i<100){
            if(i%2==0)
                System.out.print(i+" ");
                i++;
            }
    }
}

Этот код скомпилирован и печатает все четные числа от 1 до 100 .

import java.util.*;
class Example{
    public static void main(String args[]){
        int i=1;
        while(i<100 & i%2==0){
                System.out.print(i+" ");
                i++;
            }
    }
}

Этот код скомпилирован без ошибок. Но он не печатает.

Почему это так? Разве мы не можем использовать булевы логические операторы в течение некоторого времени l oop?

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Помните, что условие 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?

0 голосов
/ 01 февраля 2020

U вырвали логические операторы ... и это логический оператор, он может быть истинным, только если 2 оператора истинны (x> 5 и y <7), будут истинными, если только x> 5 истинно, а у <7 верно, что дает нам условие истинно, но если один из них не проверен, условие ложно .... но если у нас есть оператор <strong>или , условие будет истинным только если один из них истинен или оба ........ так что давайте объясним ваш код. У вас есть условие (я <100 и я% 2 == 0). 0% 2 == 0, так что это правда, и, конечно, я <100, так что пока возвращает истину (оба истины в одно и то же время), но когда я == 1, здесь мы имеем проблему 1% 2! = 0, поэтому я <100 true, но i% 2 == 0 - false, поэтому мы получаем ** true && false ** результат - false. (true && true == true) (false && true == false) (false и false == false) (true || true == true) (true || false == true) (false || false == false ) </p>

0 голосов
/ 01 февраля 2020

Ошибка в этой строке:

while(i<100 & i%2==0){

& следует заменить на &&:

while(i<100 && i%2==0){
...