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

на главную

Жанры

Java: руководство для начинающих
Шрифт:

Построчная буферизация вводимых данных средствами System, in часто приводит к недоразумениям. При нажатии клавиши в поток ввода записывается последовательность, состоящая из символов возврата каретки и перевода строки. Эти символы ожидают чтения из буфера ввода. Поэтому в некоторых приложениях, возможно, потребуется удалить символы возврата каретки и перевода строки, прежде чем переходить к следующей операции ввода. Для этого достаточно прочитать их из буфера ввода. Соответствующий пример реализации подобного решения на практике будет представлен далее в главе. Условный оператор if

Этот условный оператор уже был представлен в главе 1, а здесь он будет рассмотрен более подробно. Ниже приведена полная форма условного

оператора if. if(условие) оператор; else оператор;

где условие — это некоторое условное выражение, а оператор — адресат операторов if и else. Оператор else не является обязательным. Адресатами обоих операторов, if и else, могут также служить блоки операторов. Ниже приведена общая форма условного оператора if, в котором используются блоки операторов. if (условие) { последовательность операторов } else { последовательность операторов }

Если условное выражение оказывается истинным, то выполняется адресат оператора if. В противном случае выполняется адресат оператора else, если таковой существует. Но одновременно не может выполняться и то и другое. Условное выражение, управляющее оператором if, должно давать результат типа bool.

Для того чтобы продемонстрировать применение оператора i f (и ряда других управляющих операторов) на практике, разработаем простую игру, основанную на угадывании. Возможно, она понравится вашим детям. В первой версии этой игры программа предложит пользователю угадать задуманную букву от А до Z. Если пользователь правильно угадает букву и нажмет на клавиатуре соответствующую клавишу, программа выведет сообщение Right (Правильно). Ниже приведен исходный код программы, реализующей эту игру. // Игра в угадывание букв, class Guess { public static void main(String args[]) throws java.io.IOException { char ch, answer = 'S'; System.out.println("Ifm thinking of a letter between A and Z."); System.out.print("Can you guess it: "); ch = (char) System.in.read; // прочитать символ с клавиатуры if(ch == answer) System.out.println("** Right **"); } }

Эта программа выводит на экран сообщение с предложением угадать букву, а затем читает символ с клавиатуры. Используя условный оператор if, она сравнивает введенный символ с правильным ответом (в данном случае это буква S). Если введена буква S, то отображается сообщение об угадывании буквы. Опробуя эту программу, не забывайте, что угадываемую букву следует вводить в верхнем регистре.

В следующей версии программы оператор else используется для вывода сообщения о том, что буква не была угадана. // Игра в угадывание букв, вторая версия class Guess2 { public static void main(String args[]) throws java.io.IOException { Глава 3. Управляющие операторы char ch, answer = 'S'; System.out.println("I'm thinking of a letter between A and Z."); System.out.print("Can you guess it: "); ch = (char) System.in.read; // ввести символ с клавиатуры if(ch == answer) System.out.println("** Right **"); else System.out.println("...Sorry, you're wrong."); } } Вложенные условные операторы if

Вложенные операторы if представляют собой условные операторы if, являющиеся адресатами оператора else. Подобные условные операторы очень часто встречаются в программах. Но, пользуясь ими, следует помнить, что в Java оператор else всегда связан с ближайшим к нему оператором if, находящимся в том же кодовом блоке и не связанном с другим оператором else. Рассмотрим следующий пример: if(i == 10) { if(j < 20) а = b; if(к > 100) с = d; else а = с; // этот оператор else относится к оператору if(к > 100) } else а = d; // а этот оператор else относится к оператору if(i == 10)

Как следует из комментариев к приведенному выше фрагменту кода, последний оператор else не имеет отношения к оператору if (j < 20), поскольку он не находится с ним в одном кодовом блоке, несмотря на то, что это ближайший оператор if, не имеющий себе в пару оператор else. Следовательно, последний оператор else относится к оператору if(i == 10).

А в кодовом блоке оператор else связан с оператором if (к > 100), поскольку это самый близкий из всех находящихся к нему операторов if в том же самом блоке.

Используя вложенные условные операторы if, можно усовершенствовать игру, рассматриваемую здесь в качестве примера. Теперь при неудачной попытке угадать букву пользователю предоставляется дополнительная информация, подсказывающая, насколько он далек от правильного ответа. // Игра в угадывание букв, третья версия, class Guess3 { public static void main(String args[]) throws java.io.IOException { char ch, answer = 'S'; System.out.println("I'm thinking of a letter between A and Z."); System.out.print("Can you guess it: "); ch = (char) System.in.read; // ввести символ с клавиатуры if(ch == answer) System.out.println("** Right **"); else { 90 Java 7: руководство для начинающих, 5-е издание System.out.print("...Sorry, you're "); // вложенный оператор if if(ch < answer) System.out.println("too low"); else System.out.println("too high"); } } }

Выполнение этой программы может дать, например, следующий результат: I'm thinking of a letter between A and Z. Can you guess it: Z ...Sorry, you're too high Многоступенчатая конструкция if-else-if

В программировании часто применяется многоступенчатая конструкция if-else-if, состоящая из вложенных уловных операторов if. Ниже приведена ее общая форма. if (условие) оператор; else if (условие) оператор; else if (условие) оператор; else оператор;

Условные выражения в такой конструкции вычисляются сверху вниз. Как только обнаружится истинное условие, выполняется связанный с ним оператор, а все остальные операторы в многоступенчатой конструкции опускаются. Если ни одно из условий не является истинным, то выполняется последний оператор else, который зачастую служит в качестве условия, устанавливаемого по умолчанию. Когда же последний оператор else отсутствует, а все остальные проверки по условию дают ложный результат, никаких действий вообще не выполняется.

Ниже приведен пример программы, демонстрирующий применение многоступенчатой конструкции if-else-if. // Демонстрация многоступенчатой конструкции if-else-if. class Ladder { public static void main(String args[]) { int x; for(x=0; x<6; x++) { if(x==l) System.out.println("x is one"); else if(x==2) System.out.println("x is two"); else if(x==3) System.out.println("x is three"); else if(x==4) System.out.println("x is four"); else // Условие, выполняемое по умолчанию. System.out.println("х is not between 1 and 4й); } } }

Выполнение этой программы дает следующий результат: х is not between 1 and 4 x is one x is two x is three x is four x is not between 1 and 4

Как видите, устанавливаемый по умолчанию условный оператор else выполняется лишь в том случае, если проверки по условию всех предыдущих операторов if дают ложный результат. Оператор switch

Вторым оператором выбора в Java является оператор switch, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных условных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch. switch(выражение) { case константа1: последовательность операторов break; case константа2: последовательность операторов break; case константаЗ: последовательность операторов break; default: последовательность операторов }

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

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Хозяйка дома на холме

Скор Элен
1. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка дома на холме

Системный Нуб 4

Тактарин Ринат
4. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб 4

Приручитель женщин-монстров. Том 7

Дорничев Дмитрий
7. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 7

Назад в СССР: 1986 Книга 5

Гаусс Максим
5. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Назад в СССР: 1986 Книга 5

Жандарм 2

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

Гром над Академией. Часть 1

Машуков Тимур
2. Гром над миром
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гром над Академией. Часть 1

Энфис 5

Кронос Александр
5. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 5

Не грози Дубровскому! Том V

Панарин Антон
5. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том V

Двойня для босса. Стерильные чувства

Лесневская Вероника
Любовные романы:
современные любовные романы
6.90
рейтинг книги
Двойня для босса. Стерильные чувства

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Прогрессор поневоле

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