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

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

Жанры

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: последовательность операторов }

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

Черный дембель. Часть 5

Федин Андрей Анатольевич
5. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 5

30 сребреников

Распопов Дмитрий Викторович
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
30 сребреников

Жребий некроманта 2

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Чужбина

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

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

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

Надуй щеки! Том 3

Вишневский Сергей Викторович
3. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 3

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

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Курсант: назад в СССР 9

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

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

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

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

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

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