Пятница
29.03.2024
17:25


Форма входа


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

Оператор цикла do while
Оператор цикла do while
Как вы только что видели, если условное выражение, управляющее циклом while, первоначально имеет значение false, то тело цикла не будет выпол¬няться вообще. Однако иногда желательно выполнить тело while-цикла по крайней мере один раз, даже если условное выражение сначала имеет зна¬чение false. Другими словами, существуют ситуации, когда вы хотели бы проверить выражение завершения в конце цикла, а не в начале. К счастью, в Java имеется цикл do while, который делает именно это. Цикл do while всегда выполняет свое тело по крайней мере один раз, потому что его ус¬ловное выражение размещается в конце цикла. Общая форма цикла:
do {
  // тело цикла 
} while (condition);

Каждая итерация цикла do while сначала выполняет тело цикла, а затем оценивает условное выражение. Если это выражение — true, цикл повто¬рится. Иначе, цикл заканчивается. Как и у всех Java-циклов, condition должно быть булевским выражением.
Ниже показана переделанная версия программы с "тиками", которая демон¬стрирует цикл do while. Она генерирует тот же вывод, что и прежде.
// Демонстрирует do-while цикл.
public class DoWhile {

  public static void main(String[] args) {
    int n = 10;
    do {
      System.out.println("тик " + n);
      n--;
    } while (n > 0);
  }
}
Цикл в этой программе, хотя и технически корректный, можно записать более эффектно следующим образом:
    
    do {
      System.out.println("тик " + n);
    } while (--n > 0);
В этом примере, выражение (--n > 0) объединяет декремент n и проверку на нуль в одно выражение. Вот как это работает. Сначала выполняется опе¬ратор --n, декрементируя n и возвращая его новое значение. Затем это зна¬чение сравнивается с нулем. Если оно больше нуля, цикл продолжается, в противном случае цикл заканчивается.
Цикл do while особенно полезен, когда вы обрабатываете выбор из меню, потому что обычно требуется, чтобы тело цикла меню выполнялось по крайней мере один раз. Рассмотрим следующую программу, которая реали¬зует очень простую справочную систему для Java-операторов выбора и по¬вторения:
// Использование do-while для обработки выборки из меню 
// -- простая справочная (help) система.
public class Menu {

  public static void main(String args[]) throws java.io.IOException {
    char choice;
    do {
      System.out.println("Справка:");
      System.out.println(" 1. if");
      System.out.println(" 2. switch");
      System.out.println(" 3. while");
      System.out.println(" 4. do while");
      System.out.println(" 5. for\n");
      System.out.println("Выберите раздел :");
      //вложенный цикл do-while используются для того, чтобы 
      //избавиться от нежелательных символов возврата каретки и перевода строки
      do {
        choice = (char) System.in.read();
      } while (choice == '\n' | choice == '\r');
    } while (choice < '1' || choice > '5');
    System.out.println("\n");

    switch (choice) {
      case '1':
        System.out.println("Условный оператор if:\n");
        System.out.println("if(condition) statement1;");
        System.out.println("else statement2;");
        break;
      case '2':
        System.out.println("Оператор выбора switch:\n");
        System.out.println("switch(expression) {");
        System.out.println("  case value:");
        System.out.println("    последовательность операторов");
        System.out.println("  break;");
        System.out.println("  // ...");
        System.out.println("}");
        break;
      case '3':
        System.out.println("Оператор цикла while:\n");
        System.out.println("while(condition) тело цила;");
        break;
      case '4':
        System.out.println("Оператор цикла do while:\n");
        System.out.println("do (");
        System.out.println("  тело цикла;");
        System.out.println("while (condition);");
        break;
      case '5':
        System.out.println("Оператор цикла for:\n");
        System.out.print("for(init; condition; iteration)");
        System.out.println("  тело цикла;");
        break;
    }
  }
}
Пример вывода, выполненного этой программой:
Справка:
 1. if
 2. switch
 3. while
 4. do while
 5. for

Выберите раздел :
4


Оператор цикла do while:

do (
  тело цикла;
while (condition);

Чтобы проверить, верно ли пользователь сделал правильный выбор, здесь используется цикл do while. Если правильного выбора нет, то номер раздела справки запрашивается повторно. Так как меню должно быть отображено по крайней мере один раз, то do while — идеальный цикл для выполнения этой задачи.
Несколько других замечаний относительно этого примера: обратите внима¬ние, что символы читаются С Клавиатуры с помощью вызова System.in.read(). Это одна из функций консольного ввода языка System.in.read() используется здесь для того, чтобы узнать о выборе поль¬зователя. Он читает символы при стандартном вводе (возвращая целые чис¬ла, что объясняет, почему возвращаемое значение приводится к типу char).
По умолчанию стандартный ввод является буферизированной строкой, так что вы должны нажать клавишу <Enter>, прежде чем любые символы, кото¬рые вы печатаете, будут переданы вашей программе.
Консольный ввод Java весьма ограничен и неудобен для работы. Кроме то¬го, большинство реальных Java-программ и апплетов являются графически¬ми и работают с окнами. По этим причинам, консольный ввод используется не слишком часто. Однако в этом контексте он полезен. Еще один момент: поскольку используется метод System.in.read(), про¬грамма должна определить предложение
throws java.io.IOException
Эта строка необходима для обработки ошибок ввода и является частью сис¬темы обработки особых ситуаций языка Java.

Примечание:
Пример ввода и вывода 
public class InRead01 {
  public static void main(String[] args) throws java.io.IOException {
    char choice;
    System.out.print("Ввыдеите число ");
    choice = (char) System.in.read();
    System.out.println("Ввыдено " + choice);
  }
}

public class InRead02 {

  public static void main(String[] args) {
    {
      int x;
      try {
        x = System.in.read();
        char c = (char) x;
        System.out.println("Код символа: " + c + " =" + x);
      } catch (java.io.IOException e) {
        e.printStackTrace();
      }
    }
  }
}

import java.io.*;//подключение пакета классов
public class InRead03 {

  public static void main(String[] args) {
    { /* байтовый поток ввода System.in передается конструктору потока чтения при создании объекта класса InputStreamReader */
      java.io.InputStreamReader is = new InputStreamReader(System.in);
      /* производится буферизация данных, исключающая необходимость обращения к источнику данных при выполнении операции чтения */
      BufferedReader bis = new BufferedReader(is);
      try {
        System.out.println(
                "Введите Ваше имя и нажмите <Enter>:"); /* чтение строки из буфера; метод readLine() требует обработки возможной ошибки при вводе из консоли в блоке try */
        String name = bis.readLine();
        System.out.println("Привет, " + name);
      } catch (IOException e) {
        System.err.print("ошибка ввода " + e);
      }

    }
  }
}

import java.io.*;//подключение пакета классов
public class InRead04 {

  public static void main(String[] args)
          throws IOException {
    String c;
    InputStreamReader is = new InputStreamReader(System.in);
    BufferedReader kb = new BufferedReader(is);

    //BufferedReader kb = new BufferedReader(new InputStreamReader(System.in)); //льтернативная запись
    System.out.println("Введите слово и нажмите <Enter>:");
    c = kb.readLine();
    System.out.println("Вы ввели слово: " + c);
    // Если возникает необходимость, то можно преобраховать введенную строку в тип int
    // Но обратите внимание, что введенная строка должна содержать только цифры
    int testInt = Integer.parseInt(kb.readLine()); // Для преобразования строки (String ) в значение типа int
  }
}

Категория: Java | Добавил: Akarak (06.10.2011)
Просмотров: 9280 | Комментарии: 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