русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Синтаксис foreach


Дата добавления: 2015-06-12; просмотров: 1346; Нарушение авторских прав


В 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.nextFloat();

for(float x : f)

System.out.println(x);

}

}

<spoiler text="Output:">

0.72711575

0.39982635

0.5309454

0.0534122

0.16020656

0.57799757

0.18847865

0.4170137

0.51660204

0.73734957

</spoiler> Массив заполняется уже знакомым циклом 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 c : "An African Swallow".toCharArray() )

System.out.print(c + " ");

}

}

<spoiler text="Output:">

A n A f r i c a n S w a l l o w

</spoiler> Как будет показано далее, «синтаксис foreach» также работает для любого объекта, поддерживающего интерфейс Iterable. Многие команды for основаны на переборе серии целочисленных значений:



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

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

//: control/ForEachInt.java

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

import static net.mindview.util.Print.*;

 

public class ForEachInt {

public static void main(String[] args) {

for(int i : range(10)) // 0..9

printnb(i + " ");

print();

for(int i : range(5, 10)) // 5..9

printnb(i + " ");

print();

for(int i : range(5, 20, 3)) // 5..20 step 3

printnb(i + " ");

print();

}

}

<spoiler text="Output:">

0 1 2 3 4 5 6 7 8 9

5 6 7 8 9

5 8 11 14 17

</spoiler> Обратите внимание на использование printnb() вместо print(). Метод printnb() не выводит символ новой строки, что позволяет построить строку по фрагментам.

 

return

Следующая группа ключевых слов обеспечивает безусловный переход, то есть передачу управления без проверки каких-либо условий. К их числу относятся команды return, break и continue, а также конструкция перехода по метке, аналогичная goto в других языках. У ключевого слова return имеется два предназначения: оно указывает, какое значение возвращается методом (если только он не возвращает тип void), а также используется для немедленного выхода из метода. Метод test() из предыдущего примера можно переписать так, чтобы он воспользовался новыми возможностями:

//: control/IfElse2.java

import static net.mindview.util.Print.*;

 

public class IfElse2 {

static int test(int testval, int target) {

if(testval > target)

return +1;

else if(testval < target)

return -1;

Else

return 0; // Одинаковые значения

}

public static void main(String[] args) {

print(test(10, 5));

print(test(5, 10));

print(test(5, 5));

}

}

<spoiler text="Output:">

-1

</spoiler> В данном случае секция else не нужна, поскольку работа метода не продолжается после выполнения инструкции return.

Если метод, возвращающий void, не содержит команды return, такая команда неявно выполняется в конце метода. Тем не менее, если метод возвращает любой тип, кроме void, проследите за тем, чтобы каждая логическая ветвь возвращала конкретное значение.

 

break и continue

В теле любого из циклов вы можете управлять потоком программы, используя специальные ключевые слова break и continue. Команда break завершает цикл, при этом оставшиеся операторы цикла не выполняются. Команда continue оста­навливает выполнение текущей итерации цикла и переходит к началу цикла, чтобы начать выполнение нового шага. Следующая программа показывает пример использования команд break и continue внутри циклов for и while:

//: control/BreakAndContinue.java

// Применение ключевых слов break и continue.

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

 

public class BreakAndContinue {

public static void main(String[] args) {

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

if(i == 74) break; // Выход из цикла

if(i % 9 != 0) continue; // Следующая итерация

System.out.print(i + " ");

}

System.out.println();

// Использование foreach:

for(int i : range(100)) {

if(i == 74) break; // Выход из цикла

if(i % 9 != 0) continue; // Следующая итерация

System.out.print(i + " ");

}

System.out.println();

int i = 0;

// "Бесконечный цикл":

while(true) {

i++;

int j = i * 27;

if(j == 1269) break; // Выход из цикла

if(i % 10 != 0) continue; // Возврат в начало цикла

System.out.print(i + " ");

}

}

}

<spoiler text="Output:">

0 9 18 27 36 45 54 63 72

0 9 18 27 36 45 54 63 72

10 20 30 40

</spoiler> В цикле for переменная і никогда не достигает значения 100 — команда break прерывает цикл, когда значение переменной становится равным 74. Обычно break используется только тогда, когда вы точно знаете, что условие выхода из цикла действительно достигнуто. Команда continue переводит исполнение в начало цикла (и таким образом увеличивает значение і), когда і не делится без остатка на 9. Если деление производится без остатка, значение выводится на экран.

Второй цикл for демонстрирует использование «синтаксиса foreach» с тем же результатом.

Последняя часть программы демонстрирует «бесконечный цикл», который теоретически должен исполняться вечно. Однако в теле цикла вызывается команда break, которая и завершает цикл. Команда continue переводит исполнение к началу цикла, и при этом остаток цикла не выполняется. (Таким образом, вывод на экран в последнем цикле происходит только в том случае, если значение і делится на 10 без остатка.) Значение 0 выводится, так как 0 % 9 дает в результате 0.

Вторая форма бесконечного цикла — for(;;). Компилятор реализует конструкции while(true) и for(;;) одинаково, так что выбор является делом вкуса.



<== предыдущая лекция | следующая лекция ==>
Do-while | Нехорошая команда goto


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.024 сек.