Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Почему цикл не прекращается командной break?

#java #массивы


Имеется задание, в котором нужно проверить каждый массив на упорядоченность строго
на убывание. Если он упорядочен - true.

почему на matrix[0][1] , когда идет сравнение с matrix[0][2] - цикл не прекращает
свое сравнение, а проверяет дальше следующие массивы {5, 4, 3}, {8, 7, 6}}. Хотя я
специально обозначил, что в случае нарушения убывания значений элементов массива -
пойдет break.

public static void main(String[] args) throws Exception{
        int[][] matrix = {{3, 2, 2}, {5, 4, 3}, {8, 7, 6}};
        int bolshe;
        boolean isSortedDescendant = false;

        if (matrix.length == 0){
            isSortedDescendant = true;
        } else {
            for (int i = 0; i < matrix.length; i++) {
                bolshe = matrix[i][0];
                for (int j = 0; j < matrix[i].length-1; j++) {
                    if (bolshe > matrix[i][j+1]) {
                        bolshe = matrix[i][j+1];
                        isSortedDescendant = true;
                    } else if (bolshe <= matrix[i][j+1]){
                        isSortedDescendant = false;
                        break;    
                    }
                }
            }
        }
        System.out.println(isSortedDescendant);
    }   
}

    


Ответы

Ответ 1



Обратите внимание, что у вас вложенный цикл. При использовании внутри набора вложенных циклов оператор break будет выходить только из самого внутреннего цикла. Для решения данной задачи стоит воспользоваться метками break outer; public static void main(String[] args) throws Exception{ int[][] matrix = {{3, 2, 2}, {5, 4, 3}, {8, 7, 6}}; int bolshe; boolean isSortedDescendant = false; if (matrix.length == 0){ isSortedDescendant = true; } else { outer: // Ставим метку for (int i = 0; i < matrix.length; i++) { bolshe = matrix[i][0]; for (int j = 0; j < matrix[i].length-1; j++) { if (bolshe > matrix[i][j+1]) { bolshe = matrix[i][j+1]; isSortedDescendant = true; } else if (bolshe <= matrix[i][j+1]){ isSortedDescendant = false; break outer; // Переходим к метке } } } } System.out.println(isSortedDescendant); } Замечание: Break не проектировался в качестве нормального средства завершения цикла. Эту цель обслуживает условное выражение заголовка цикла. Оператор break следует использовать для прерывания цикла только тогда, когда возникают некоторые специальные ситуации.

Комментариев нет:

Отправить комментарий