Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

103

^(инициализация; логическое выражение; шаг)

команда

Любое из трех выражений цикла (инициализация, логическое выражение или шаг) можно пропустить. Перед выполнением каждого шага цикла проверяется условие цикла; если оно окажется ложно, выполнение продолжается с инструкции, следующей за конструкцией for. В конце каждой итерации выполняется секция шаг.

Цикл for обычно используется для «счетных» задач:

// control/ListCharacters.java

// Пример использования цикла "for": перебор

// всех ASCII-символов

нижнего регистра

public class ListCharacters {

public static void main(String[] args) { for(char с = 0, с < 128, С++)

i f(Character.i sLowerCase(c))

System out рппШСзначение- " + (int)c + " символ. " + с).

}

} /* Output-значение 97 символ a значение 98 символ b" значение 99 символ с" значение 100 символ d" значение- 101 символ: е" значение 102 символ, f" значение 103 символ, д" значение 104 символ: h" значение- 105 символ- i значение 106 символ- j

*///:-

Обратите внимание, что переменная i определяется в точке ее использования, в управляющем выражении цикла for, а не в начале блока, обозначенного фигурными скобками. Область действия для i — все выражения, принадлежащие циклу.

В программе также используется класс-«обертка» java.Lang.Character, который не только позволяет представить простейший тип char в виде объекта, но и содержит ряд дополнительных возможностей. В нашем примере используется статический метод этого класса isLowerCase, который проверяет, является ли некоторая буква строчной.

Традиционные процедурные языки (такие, как С) требовали, чтобы все переменные определялись в начале блока цикла, чтобы компилятор при создании блока мог выделить память под эти переменные. В Java и С++ переменные разрешено объявлять в том месте блока цикла, где это необходимо. Это позволяет программировать в более удобном стиле и упрощает понимание кода.

Оператор-запятая

Ранее в этой главе уже упоминалось о том, что оператор «запятая» (но не запя-тая-разделитель, которая разграничивает определения и аргументы функций) может использоваться в Java только в управляющем выражении цикла for. И в секции инициализации цикла, и в его управляющем выражении можно записать несколько команд, разделенных запятыми; они будут обработаны последовательно.

Оператор «запятая» позволяет определить несколько переменных в цикле for, но все эти переменные должны принадлежать к одному типу:

//. control/CommaOperator.java

public class CommaOperator {

public static void main(String[] args) {

for(int i = 1. j = i + 10, i < 5. i++, j = i * 2) {

System out.printlnC'i = " + i + " j = " + j);

}

}

} /* Output: i = 1 j = 11 i = 2 j = 4 i = 3 j = 6 i = 4 j = 8 *///:-

Определение int в заголовке for относится как к i, так и к j. Инициализацон-ная часть может содержать любое количество определений переменных одного типа. Определение переменных в управляющих выражениях возможно только в цикле for. На другие команды

выбора или циклов этот подход не распространяется.

Синтаксис foreach

В Java SE5 появилась новая, более компактная форма for для перебора элементов массивов и контейнеров (см. далее). Эта упрощенная форма, называемая синтаксисом foreach, не требует ручного изменения служебной переменной для перебора последовательности объектов — цикл автоматически представляет очередной элемент.

Следующая программа создает массив float, после чего перебирает все его элементы:

//• control/ForEachFloat.java import java util.*,

public class ForEachFloat {

public static void main(String[] args) { Random rand = new Random(47), float f[] = new float[10], for(int i = 0; i < 10. i++)

f[i] = rand.nextFloatO, for(float x f)

System out println(x).

}

} /* Output

0.72711575

0.39982635

0.5309454

0.0534122

0.16020656

0.57799757

0.18847865

0.4170137

0.51660204

0.73734957 *///.-

Массив заполняется уже знакомым циклом for, потому что для его заполнения должны использоваться индексы. Упрощенный синтаксис используется в следующей команде:

for(float X f)

Эта конструкция определяет переменную х типа float, после чего последовательно присваивает ей элементы f.

Любой метод, возвращающий массив, может использоваться с данной разновидностью for. Например, класс String содержит метод toCharArray, возвращающий массив char; следовательно, перебор символов строки может осуществляться так:

//: control/ForEachString.java

public class ForEachString {

public static void main(String[] args) {

for(char с : "An African Swallow".toCharArray ) System.out.print(c + " ");

}

} /* Output:

An African Swallow *///.-

Как будет показано далее, «синтаксис foreach» также работает для любого объекта, поддерживающего интерфейс Iterable.

Многие команды for основаны на переборе серии целочисленных значений:

for (int i = 0; i < 100; i++)

В таких случаях «синтаксис foreach» работать не будет, если только вы предварительно не создадите массив int. Для упрощения этой задачи я включил в библиотеку net.mindview.util.Range метод range, который автоматически генерирует соответствующий массив:

//: control/ForEachlnt.java

import static net.mindview.util.Range.*,

import static net.mindview.util Print.*;

public class ForEachlnt {

public static void main(String[] args) { for(int i : range(10)) // 0..9

printnbCi +

v).

printO;

for(int

i : range(5,

10)) // 5..9

printnb(i +

printO;

for(int

i : range(5.

20. 3)) // 5

Поделиться:
Популярные книги

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Личный маг для Наследника. Эхо погибшей цивилизации

Верескова Дарья
2. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Личный маг для Наследника. Эхо погибшей цивилизации

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Разведчик. Медаль для разведчика. «За отвагу»

Корчевский Юрий Григорьевич
2. Разведчик
Фантастика:
боевая фантастика
попаданцы
5.20
рейтинг книги
Разведчик. Медаль для разведчика. «За отвагу»

На границе империй. Том 7. Часть 5

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

Real-Rpg. Еретик

Жгулёв Пётр Николаевич
2. Real-Rpg
Фантастика:
фэнтези
8.19
рейтинг книги
Real-Rpg. Еретик

Поцелуй на снегу

Кистяева Марина
1. Время любви
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Поцелуй на снегу

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2