почему срабатывает цикл While (!false) в данном случае

Рейтинг: -1Ответов: 1Опубликовано: 11.07.2023

Почему срабатывает цикл While в данное случае?

Переменную isSorted инициировали значением false. Условие для срабатывания цикла - true (!isSorted). Почему цикл срабатывает? Переменная ведь false.

Очень хочу понять.

public static int[] bubbleSort(int[] nums) {

    boolean isSorted = false;

    while (!isSorted) {       // !isSorted = !false = true

        isSorted = true;

        for (int i = 1; i < nums.length; i++) {

            if (nums[i - 1] > nums[i]) {
                int temp = nums[i];
                nums[i] = nums[i - 1];
                nums[i - 1] = temp;
                isSorted = false;
            }
        }
    }
    return nums;
}

Ответы

▲ 3

Для начала посмотрим, что будет без оператора отрицания (без !)

Взгляните на это условие:

if(isSorted){
    System.out.println("Блок if выполнился!");
}

Если мы дадим значение true переменной isSorted, то блок if выполнится и в консоли увидим:

Блок if выполнился!

Если же значение переменной будет false, то блок if не сработает и консоль останется пустой.

Из этого можно сделать вывод, что:

if(isSorted){ //Тоже самое, что и if(isSorted == true)
     //......
}

Теперь ваша запись

По скольку ! - это оператор отрицания, то:

if(!isSorted){ //Тоже самое, что и if(isSorted == false)
    //....
}

В вашем случае у вас переменная isSorted имеет значение false. Вы говорите циклу !isSorted ("выполнись, если isSorted имеет значение false"), вот поэтому цикл выполняется.