Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Основы Языка
Раздел: Операторы управления
Переходящие Операторы
Домашняя страница > Изучение Языка Java > Основы языка

Переходящие Операторы

break Оператор

break у оператора есть две формы: маркированный и немаркированный. Вы видели немаркированную форму в предыдущем обсуждении switch оператор. Можно также использовать немаркированный break завершать a for, while, или do-while цикл, как показано в следующем BreakDemo программа:

class BreakDemo {
    public static void main(String[] args) {

        int[] arrayOfInts = 
            { 32, 87, 3, 589,
              12, 1076, 2000,
              8, 622, 127 };
        int searchfor = 12;

        int i;
        boolean foundIt = false;

        for (i = 0; i < arrayOfInts.length; i++) {
            if (arrayOfInts[i] == searchfor) {
                foundIt = true;
                break;
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor + " at index " + i);
        } else {
            System.out.println(searchfor + " not in the array");
        }
    }
}

Эта программа ищет номер 12 в массиве. break оператор, показанный в полужирном стиле, завершается for цикл, когда то значение находится. Поток управления тогда передает оператору после for цикл. Вывод этой программы:

Found 12 at index 4

Немаркированный break оператор завершает самое внутреннее switch, for, while, или do-while оператор, но маркированный break завершает внешний оператор. Следующая программа, BreakWithLabelDemo, подобно предыдущей программе, но использует вложенный for циклы, чтобы искать значение в двумерном массиве. Когда значение находится, маркированный break завершает внешнее for цикл (маркированный "поиск"):


class BreakWithLabelDemo {
    public static void main(String[] args) {

        int[][] arrayOfInts = { 
            { 32, 87, 3, 589 },
            { 12, 1076, 2000, 8 },
            { 622, 127, 77, 955 }
        };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;

    search:
        for (i = 0; i < arrayOfInts.length; i++) {
            for (j = 0; j < arrayOfInts[i].length;
                 j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    break search;
                }
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor +
                               " at " + i + ", " + j);
        } else {
            System.out.println(searchfor +
                               " not in the array");
        }
    }
}

Это - вывод программы.

Found 12 at 1, 0

break оператор завершает помеченный оператор; это не передает поток управления к метке. Поток управления сразу передается оператору после маркированного (завершенного) оператора.

continue Оператор

continue оператор пропускает текущую итерацию a for, while , или do-while цикл. Немаркированная форма пропускает до конца тела самого внутреннего цикла и оценивает boolean выражение, которое управляет циклом. Следующая программа, ContinueDemo , шаги через a String, подсчет происшествий буквы "p". Если текущий символ не является p, continue оператор пропускает остальную часть цикла и продолжается к следующему символу. Если это - "p", программа постепенно увеличивает количество буквы.


class ContinueDemo {
    public static void main(String[] args) {

        String searchMe 
            = "peter piper picked a " +
              "peck of pickled peppers";
        int max = searchMe.length();
        int numPs = 0;

        for (int i = 0; i < max; i++) {
            // interested only in p's
            if (searchMe.charAt(i) != 'p')
                continue;

            // process p's
            numPs++;
        }
        System.out.println("Found " +
            numPs + " p's in the string.");
    }
}

Вот вывод этой программы:

Found 9 p's in the string.

Чтобы видеть этот эффект более ясно, попытайтесь удалить continue оператор и перекомпиляция. Когда Вы выполните программу снова, количество будет неправильным, говоря, что это нашло 35 p's вместо 9.

Маркированный continue оператор пропускает текущую итерацию внешнего цикла, отмеченного с данной меткой. Следующий пример программы, ContinueWithLabelDemo, вложенные циклы использования, чтобы искать подстроку в пределах другой строки. Требуются два вложенных цикла: один, чтобы выполнить итерации по подстроке и один, чтобы выполнить итерации по искавшей строке. Следующая программа, ContinueWithLabelDemo, использует маркированную форму, продолжают пропускать итерацию во внешнем цикле.


class ContinueWithLabelDemo {
    public static void main(String[] args) {

        String searchMe 
           = "Look for a substring in me";
        String substring = "sub";
        boolean foundIt = false;

        int max = searchMe.length() - 
                  substring.length();

    test:
        for (int i = 0; i <= max; i++) {
            int n = substring.length();
            int j = i;
            int k = 0;
            while (n-- != 0) {
                if (searchMe.charAt(j++)
                    != substring.charAt(k++)) {
                    continue test;
                }
            }
            foundIt = true;
                break test;
        }
        System.out.println(foundIt ?
            "Found it" : "Didn't find it");
    }
}

Вот вывод из этой программы.

Found it

return Оператор

Последний из переходящих операторов return оператор. return оператор выходит от текущего метода, и возвратов потока управления туда, где метод был вызван. return у оператора есть две формы: тот, который возвращает значение, и тот, который не делает. Чтобы возвратить значение, просто поместите значение (или выражение, которое вычисляет значение) после return ключевое слово.

return ++count;

Тип данных возвращенного значения должен соответствовать тип объявленного возвращаемого значения метода. Когда метод объявляется void, используйте форму return это не возвращает значение.

return;

Урок Классов и Объектов покроет все, что Вы должны знать о методах записи.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: для Оператора
Следующая страница: Сводка Операторов управления