Пример обработки исключений при чтении числа из консоли



 

Ниже приведен пример ввода целого числа tс консоли и вывода его снова в консоль – с обработкой всех возникающих исключений.

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

publicclass Test3 {

 

publicstaticvoid main(String[] args) {

 

     intt;

     try {

     // !!! Здесь может быть выброшено исключение

     // ввода-вывода

          BufferedReader br = new BufferedReader(new

          InputStreamReader(System.in));

          //Читаем из консоли строку

     // !!! Здесь может быть выброшено исключение

     // ввода-вывода

          Strings = br.readLine();

          //конвертируемстрокувчислоt

     // !!! Здесь может быть выброшено исключение

     // неправильного формата числа

          t = Integer.parseInt(s);

 

     //Ловим исключения ввода-вывода

     } catch (IOExceptione) {

          //Выводим сообщение об исключении в консоль

     System.out.println("IOException: "

                    + e.getMessage());

          // завершаемработупрограммы

     return;

 

     //Ловим исключения неправильного формата числа

     } catch (NumberFormatExceptione) {

          //Выводим сообщение об исключении в консоль

          System.out.println("NumberFormatException: "

                    +e.getMessage());

          // завершаем работу программы

          return;

     }

 

     // Если исключений не было – дойдем до этого кода

     // и выведем введенное значение t

     System.out.println("t=" + t);

}

 

}

 

Пример решения задачи A

 

Ниже приведено решение для 0 варианта задачи A.

 

Вариант A.0

Для введенного числа t (температура на улице в конце января) вывести прилагательное, характеризующее температуру качественно.

Если t>–5, то вывести «Тепло».

Если –5>= t>–20, то вывести «Нормально».

Если –20>= t, то вывести «Холодно».

 

Текст программы:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

 

publicclass A_0 {

publicstaticvoid main(String[] args) {

     int t;

         

     System.out.print("Введите t: ");

     try {

          BufferedReader br = new BufferedReader(new

               InputStreamReader(System.in));

          //Читаем из консоли

          String s = br.readLine();

          //конвертируемстрокувчисло

          t = Integer.parseInt(s);

     //Ловим исключения ввода-вывода

     } catch (IOExceptione) {

          //Выводим сообщение об исключении в консоль

          System.out.println("IOException: "

                    +e.getMessage());

          // завершаемработупрограммы

          return;

     //Ловим исключения неправильного формата числа

     } catch (NumberFormatExceptione) {

          //Выводим сообщение об исключении в консоль

          System.out.println("NumberFormatException: "

               +e.getMessage());

          // завершаем работу программы

          return;

     }

         

     // собственно вывод «Тепло», «Нормально» и «Холодно»

     if (t >–5) {

          System.out.println("Тепло!");

     } elseif (t >–20) {

          System.out.println("Нормально!");

     } else {

          System.out.println("Холодно!");

     }

}

}

 

Блок-схема программы:

 


Рис. 3.7. Блок-схема программыA.0

 

ТрассировкаразвилоквEclipse

 

Чтобы выполнить трассировку нашей программы нужно установить точки прерывания, где требуется. В нашем случае мы устанавливаем точку прерывания на 32 строке кода:

 

 

Рис. 3.8. Ставим точку прерывания

 

 

Выбираем режим выполнения Debug:

 

 

Рис. 3.9. Выбор режима Debug

 

Вводим значение t – в нашем случае –25:

 

 

Рис. 3.10. Ввод значения t=–25

 

Переключаемся в перспективуDebug. Чтобы диалог переключения не появлялся при каждом запуске программы в режиме трассировки, лучше выбрать пункт «Remembermydecision», как показано на рис. 3.11.

 

 

Рис. 3.11. Ставим галочку, чтобы сообщение не появлялось снова

 

 

После этого собственно можно приступить к трассировке. Обратите внимание на то, что трассировка возможна, только если в закладке Debug активным является именно отлаживаемый метод – в нашем случае main – это видно на рисунках ниже:

 

 

Рис. 3.12. Отлаживаемый метод активен

 

 

Рис. 3.13.Отлаживаемый метод не активен

 

В Eclipse есть возможность просмотреть не только состояние переменных, но и любых выражений. Чтобы их просмотреть,нужно добавить к просматриваемым видам (Views) Expressions:

 

 

Рис. 3.14. Добавляем Expressions

 

 

В закладках появится Expression, в который можно добавлять любые выражения, в том числе те выражения, которые вычисляются в if–“t>–5”, “t>–20”:

 

 

Рис. 3.15. Добавляем выражения в Expressions

 

 

При t = –25, программа зайдет только в блок последнего else:

 

 

Рис. 3.16. Трассировка программы

 

 

И в консоль будет выведено «Холодно»:

 

 

Рис. 3.17. Вывод строки «Холодно» в консоль

 

Чтобы завершить отлаживаемое приложение, нужно выполнить команду Terminate:

 

 

Рис. 3.18. Выполнение команды Terminate

 

Eclipse после завершения отладки выглядит так:

 

 

Рис. 3.19.Eclipseпосле завершения отладки

 

 

ЦИКЛЫ

Цикл с постусловием dowhile

 

Часто в алгоритме требуется выполнять какие-то действия несколько раз. В программе в таком случае используется цикл. Простейший цикл – цикл с постусловием. В Java такой цикл обозначается так:

 

do {

Действие;

} while (условное_выражение);

 

 

На блок-схеме он изображается так:

 


Рис. 4.1. Структура цикла с постусловием

 

Рассмотрим использование цикла с постусловием на примере вычисления факториала.

Напомним, что факториал числа N можно вычислить как произведение натуральных чисел 1 * 2 * 3 * … * N–1 * N.

На Java код вычисления факториала через цикл с постусловием можно записать так:

 

publicclass Test4 {

 

publicstaticvoid main(String[] args) {

     int n = 4;

     int f = 1;    

     int i = 1;

     do {

          f = f * i;

          i = i + 1;

     } while (i <= n);

     System.out.println("f= " + f);

}

}

 

 

Блок схема для этой программы выглядит так:

 

 

Рис. 4.2. Блок-схема программы для вычисления факториала

 

Трассировка цикла в Eclipse

 

Рассмотрим трассировку цикла в Eclipse на примере факториала.

Точку прерывания поставим настроку9. ВExpressions добавим все переменные (n, f, i) и условие продолжения цикла (i<=n). Логично, что тело цикла будет выполняться до тех пор, пока условие i<=n будет равно true.

 

 

Рис. 4.3.Трассировка цикла

 

 

Поскольку n = 4, iпоследовательно получит значения 1, 2, 3, 4. Fбудет вычислено последовательно f = 1, затем f = 1 * 1 = 1, f = 1*2 = 2, f = 2 * 3 = 6, f =  6 * 4 = 24. В итоге i станет равным 5, и только в этот момент условие продолжения станет равным false. В этот момент f = 24. Этот момент отображен на рис. 4.4. ниже:

 

 

Рис.4.4.Трассировка цикла

 

 

После этого программа выйдет из цикла и перейдет к выводу результата:

 

 

Рис. 4.5.Вывод результата вычисления факториала

 

Пример решения задачи B

 

Рассмотрим реализацию задачи B.0 с помощью цикла dowhile.

 

ЗадачаB.0:

Население города увеличивается на 3% каждый год. В 2013 году население города составляло 650000 человек. Напишите программу, которая выведет на экран предсказываемую численность населения города в каждом году, вплоть до 2040.

 

 

Кодпрограммы:

 

publicclass B_0 {  

publicstaticvoid main(String[] args) {

     int year = 2014;

     int population = 650000;

     do {

          System.out.println("В " + year

                    + " годувгородеживет "

                    + population);

     population = (population * 103) / 100;

          year++;

     } while (year<= 2040);       

}

}

 

Блок-схема для этого кода выглядит так:

 

 

Рис. 4.6. Блок-схема программы подсчета населения

Цикл с предусловием while

 

Код цикла с предусловием в Java выглядит так:

 

while (условное_выражение) {

Действие;

}

 

 

Блок-схема цикла с предусловием выглядит так:

 

 

Рис. 4.7. Структура цикла с предусловием while

 


Дата добавления: 2018-04-04; просмотров: 800; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!