Пятница
29.03.2024
18:17


Форма входа


Приветствую Вас Гость | RSS
Статьи по ORACLE, PL/SQL, Java и немного по SHELL (BASH),...
Главная Каталог статей Регистрация Вход
Главная » Статьи » Java приложения » Java

Оператор цикла for
Оператор цикла for
Общая форма оператора for:
for (initialization; condition; iteration) statement;
Если повторяется только один оператор, фигурные скобки не нужны.
Цикл for работает следующим образом. В начале работы цикла выполняется выражение initialization. В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важ¬но понять, что выражение инициализации выполняется только один раз. Затем оценивается condition. Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым гранич¬ным значением. Если это выражение — true, то отрабатывают операторы из тела цикла, если — false, цикл заканчивается. Далее выполняется часть цикла iteration. Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом. Затем цикл реализовывает итерации. В каждом проходе цикла — сначала оценива¬ется условное выражение, потом выполняется тело цикла и затем — выра¬жение iteration. Этот процесс повторяется до тех пор, пока управляющее выражение не станет false.
Ниже приводится версия программы "тиков", которая использует цикл for:
// Демонстрирует for-цикл. 
public class ForTick {

  public static void main(String[] args) {
    int n;
    for (n = 10; n > 0; n--) {
      System.out.println("тик " + n);
    }
  }
}
Объявление переменных управления внутри цикла for
Часто переменная, которая управляет циклом for, необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for. Напри¬мер, предшествующая программа перекодирована так, чтобы переменная управления циклом п объявлялась типом int внутри заголовка for:
// Определение переменной управления циклом внутри for. 
public class ForTick {

  public static void main(String[] args) {
    // здесь n объявлена внутри заголовка for-цикла 
    for (int n = 10; n > 0; n--) {
      System.out.println("тик " + n);
    }
  }
}
Когда переменная объявляется внутри заголовка for-цикла, важно помнить, что область ее действия заканчивается там же, где и у for-оператора (т. е. область действия переменной ограничена циклом for). Вне цикла for пере¬менная прекратит существование. Если нужно использовать управляющую переменную цикла в другом месте программы, ее не следует объявлять внут¬ри цикла for.
Когда управляющая переменная цикла не нужна где-то в другом месте, большинство Java-программистов объявляет ее внутри for-заголовка. Ниже показана небольшая программа, которая проверяет, является ли число про¬стым (Простым называется число, которое делится только на собственное значение и на 1 (например, простыми являются числа 1, 2, 3, 5, 7, 11, 13 и т. д.). Обратите внимание, что управляющая переменная цикла i объявлена внутри for-заголовка, т. к. она нигде больше не нужна.
// Проверка на принадлежность к категории простых чисел. 
public class FindPrim {

  public static void main(String[] args) {
    {
      int num;
      boolean isPrime = true;
      num = 14;
      for (int i = 2; i < num / 2; i++) {
        if ((num % i) == 0) {
          isPrime = false;
          break;
        }
      }
      if (isPrime) {
        System.out.println("Простое число");
      } else {
        System.out.println("Число не является простым");
      }
    }
  }
}
Использование запятой
Может возникнуть желание включить более одного оператора в инициализационную и итерационную части цикла for. Например, рассмотрим цикл следующей программы:

public class Sample {

  public static void main(String[] args) {
    int a, b;
    b = 4;
    for (a = 1; a < b; a++) {
      System.out.println("a = " + a);
      System.out.println("b = " + b);
      b--;
    }
  }
}

He трудно заметить, что цикл зависит от взаимодействия двух переменных. Так как цикл управляется двумя переменными, было бы полезно включить их непосредственно в заголовок оператора for вместо того, чтобы обрабаты¬вать переменную ь вручную. К счастью, в Java обеспечена такая возмож¬ность. Чтобы позволить двум или большему числу переменных управлять циклом for, Java разрешает вам включать множественные операторы как в инициализационную, так и в итерационную части for-заголовка. Каждый оператор отделяется от следующего запятой.
Используя запятую, предыдущий цикл for можно закодировать более эф¬фективно:
// Использование запятой.
public class Comma {

  public static void main(String[] args) {
    int a, b;
    for (a = 1, b = 4; a < b; a++, b--) {
      System.out.println("а = " + a);
      System.out.println("b = " + b);
    }
  }
}

В этом примере инициализационная часть устанавливает значения как для а, так и для ь. Два разделенных запятыми оператора в итерационной части выполняются каждый раз, когда цикл повторяется. Программа генерирует следующий вывод:
а = 1
b = 4
а = 2
b = 3 

Замечание
В Java запятая — это разделитель, который приме¬няется только в цикле for.
Некоторые разновидности цикла for
Цикл for поддерживает ряд разновидностей, которые усиливают его гиб¬кость и расширяют применимость. Причина такой гибкости заключается в том, что три части его заголовка — инициализация, проверка условия и ите¬рация — могут использоваться не только для внутренних целей. На самом деле эти три части цикла for можно применять для решения любой задачи. Рассмотрим некоторые примеры.
Одна из наиболее общих разновидностей включает условное выражение. Это выражение не нуждается в сравнении переменной управления циклом с некоторым значением. На самом деле, условие, управляющее циклом for, может быть любым булевским выражением. Например, рассмотрим сле¬дующий фрагмент:
    boolean done = false;
    for (int i = 1; !done; i++) {
      // ...
      if (interrupted()) {
        done = true;
      }
    }
В этом примере цикл for продолжает выполняться до тех пор, пока boolean переменная done имеет значение true, Он не проверяет значения i.
Другая интересная разновидность цикла for — когда инициализацщощ^е или итерационное выражение (или оба) могут отсутствовать, как показано в следующей программе:
// Части цикла for могут быть пустыми.
public class ForVar {

  public static void main(String[] args) {
    int i;
    boolean done = false;
    i = 0;
    for (; !done;) {
      System.out.println("i равно " + i);
      if (i == 10) {
        done = true;
      }
      i++;
    }
  }
}

Здесь инициализационное и итерационное выражения были удалены из for, так что эти части for пусты. В данном примере это не имеет никакого зна¬чения и может рассматриваться просто как ограниченный стиль программи¬рования. Однако могут возникнуть ситуации, когда такой подход оправдан. Например, если начальное условие устанавливается через сложное выра¬жение в другом месте программы или управляющая переменная цикла из¬меняется непоследовательным способом, определяемым действиями, проис¬ходящими в теле цикла, то удобнее оставить эти части заголовка цикла for пустыми.
Еще одна разновидность цикла for — можно преднамеренно создать беско¬нечный цикл (цикл, который никогда не заканчивается), если оставить, все три части заголовка for-цикла пустыми. Например:
    for (;;) {
      //...
    }
Этот цикл будет выполняться всегда, потому что нет условия, при котором он завершится. Хотя существуют некоторые программы, такие как команд¬ное процессоры операционных систем, требующие бесконечною цикла, большинство "бесконечных циклов" в действительности является просто циклами со специальными требованиями завершения. Как вы вскоре увидите, существует способ завершить цикл — Даже бесконечный. (подобный по¬казанному выше), который не использует нормальное условное выражение цикла.
Вложенные циклы
Подобно всем другим языкам программирования Java допускает вложение циклов. То есть один цикл может быть внутри другого. Например, следую¬щая программа, вкладывает for-циклы:
// Циклы могут быть вложенными.

public class Nested {

  public static void main(String[] args) {
    int i, j;
    for (i = 0; i < 5; i++) {
      for (j = i; j < 5; j++) {
        System.out.print(".");
      }
      System.out.println();
    }
  }
}

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

Приведем более внятный пример этой программы:
public class NestedArray {

  public static void main(String[] args) {
    int i, j;
    for (i = 0; i < 5; i++) {
      for (j = i; j < 5; j++) {
        System.out.println("i = " + i + ",j = " + j);
      }
    }
  }
}
Вывод этой программы
i = 0,j = 0
i = 0,j = 1
i = 0,j = 2
i = 0,j = 3
i = 0,j = 4
i = 1,j = 1
i = 1,j = 2
i = 1,j = 3
i = 1,j = 4
i = 2,j = 2
i = 2,j = 3
i = 2,j = 4
i = 3,j = 3
i = 3,j = 4
i = 4,j = 4
В этом примере более наглядно видно, что на каждый вывод i, приходится 5 выводов j.

Категория: Java | Добавил: Akarak (07.10.2011)
Просмотров: 17505 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Меню сайта

Категории раздела
Java [12]
Консольные приложения
Java ООП [2]

Интересные сайты
  • sql.ru
  • all-oracle.ru
  • oranet.ru
  • oracloid.ru
  • forum.vingrad.ru

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Поиск

    Copyright MyCorp © 2024
    Используются технологии uCoz