Запуск программы и ввод переменных через консоль
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Запускаем на выполнение эту программу.

Когда она запустится, надо щелкнуть мышкой в консоль и ввести значение A, как показано на рис. 2.2.

 

 

Рис. 2.2. Ввод значения А

 

Затем нужно ввести значение B, затем значение C.

 

После ввода C программа подсчитает корни и выведет их в консоль. После окончания работы программы Eclipse будет иметь вид:

 

 

Рис. 2.3. Вывод корней квадратного уравнения

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

 

Очень часто в процессе отладки программы помогает трассировка. Сейчас мы посмотрим, как трассировка выполняется в Eclipse.

Чтобы перейти в режим трассировки, нужно сначала поставить точку прерывания в тексте программы. В нашем примере поставим точку прерывания на 40 строку – строку, где производится конвертация ранее введенной строки s1 в переменную a.

 

Для установки точки прерывания нужно щелкнуть левой кнопкой мыши левее номера строки и выбрать из контекстного меню пункт Toggle Breakpoint, как это показано на рис. 2.4 ниже:

 

 

Рис. 2.4. Точка прерывания

 

После установки точки прерывания нужно запустить программу на выполнение в режиме Debug:

 

 

Рис. 2.5. Запуск программы в режиме Debug

 

 

При первом запуске в режиме Debug Вы можете получить подобное сообщение:

 

 

Рис. 2.6. Разрешаем доступ Eclipse в брандмауэре

 

Выберите «Разрешить доступ».

 

 

После ввода строк со значениями для a, b, c Eclipse выдаст Вам запрос на изменение перспективы. Ответьте ему Yes. Также желательно поставить галочку на Remember my decision, чтобы Eclipse делал такое же изменение каждый раз – см. рис. 2.7 ниже:

 

 

Рис. 2.7. Запрос на изменение перспективы

 

 

После переключения в перспективу Debug вы увидите такой вид Eclipse:

 

 

Рис. 2.8. Перспектива Debug в Eclipse

 

Теперь, чтобы трассировать (выполнять по шагам программу), нужно нажимать на клавиатуре F6 (Step Over – на рис. 2.9 помечено цифрой 1).

При пошаговом выполнении в Variables можно видеть текущее состояние переменных (цифра 2 на рис. 2.9), а в редакторе кода видеть, какая строка будет выполняться следующей (цифра 3 на рис. 2.9).

 

 

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


 

Пройдя по шагам всю программу и дойдя до последнего вывода в коде, Вы получите такой вид Eclipse:

 

 

Рис. 2.10. Завершение трассировки

 

После окончания трассировки нужно перейти в Java перспективу. Для этого можно зайти в меню и выбрать Window/Open Perspective/Java, как это показано на рис. 2.11.

 

Рис. 2.11. Переход в Java перспективу

 

 Снова наши поздравления – Вы выполнили трассировку Вашей программы в Eclipse!

 

Теперь, после первичного знакомства с Java и с Eclipse, мы перейдем к изучению управляющих конструкций Java. Вас ждут 3 работы – A, B и C, выполняя которые Вы освоитесь в Eclipse, а Java для Вас станет хорошим знакомым, с которым можно решать любые задачи. Вы готовы перейти к следующему этапу? Тогда – поехали!!!

 

Первая работа A – в ней Вы напишите программу на Java, в которой будут развилки, и в которой Вы попробуете все ранее рассмотренные инструменты Eclipse.




РАЗВИЛКИ

Развилки полные и усеченные

 

Практически в каждом алгоритме есть несколько путей его выполнения. Тот или иной путь выбирается в процессе выполнения алгоритма в зависимости от условий. Например, если мы обратимся к кулинарии и рассмотрим рецепт приготовления блинчиков, то при приготовлении блинчиков один вариант рецепта используется, если есть кефир, другой – если нет кефира, но есть, например, сметана.

В программировании такие ситуации описываются при помощи развилки.

 

Типичная развилка выглядит в Java так:

 

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

Действие_1

} else {

Действие_2

}

 

В блок-схеме она выглядит так:

 


Рис. 3.1. Структура развилки

 

Пример – вычисление максимума из двух чисел – val1 и val2:

 

if (val1 > val2) {

max_val = val1;

} else {

max_val = val2;

}

 

 

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

 

 

Рис. 3.2. Блок-схема вычисления максимума из двух чисел

 

Развилка, в которой есть и ветка if, и ветка else, называется полной.

Развилка, в которой есть только ветка if, а ветки else нет, называется усеченной развилкой. Код усеченной развилки в Java выглядит так:

 

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

Действие_1

}

 

Блок - схема для усеченной развилки выглядит так:

 


Рис. 3.3. Структура усеченной развилки

 

Обратите внимание, что в блок-схеме ЕСТЬ ветка МИНУС, но на ней НЕТ ДЕЙСТВИЙ. При этом в тексте программы else нет совсем. Это важный момент!


 


Пример – вычисление минимума из трех чисел

 

Ниже представлена программа, которая находит и выводит минимальное из трех чисел. В реализации используются усеченные развилки.

public class Test1 {

 

public static void main(String[] args) {

 

     int val1 = 9;

     int val2 = 10;

     int val3 = 6;

 

     int min_val = val1; // берем за минимальный число val1

         

     if (val2 < min_val) { // если второе меньше

     min_val = val2; // то теперь минимальное val2

     }

 

     if (val3 < min_val) { // если третье меньше

     min_val = val3; // то теперь минимальное val3

     }

         

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

}

 

}

 


 

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

 


Рис. 3.4. Блок-схема программы поиска минимума из трех чисел

 

 


Вложенные развилки

 

Одна развилка разбивает программу на 2 пути выполнения. Часто путей выполнения программы больше, чем два. Чтобы выбрать один из них, требуется либо набор идущих друг за другом усеченных развилок, как в предыдущем примере, либо вложенные развилки.

 Типичная вложенная развилка выглядит так:

 

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

Действие_1

} else {           

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

Действие_2

} else {

Действие_3

}

}

 

В сокращенной записи используется последовательность else if в одной строке:

 

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

Действие_1

} else if (условное_выражение2) {

Действие_2

} else {

Действие_3

}

 

 

Блок-схема для вложенной развилки выглядит так:

 

 

Рис. 3.4. Структура вложенной развилки

 

 

Пример с вложенными развилками

 

Ниже представлена программа вычисления размера штрафа за превышение скорости, реализованная с использованием вложенных развилок:

 

public class Test2 {

public static void main(String[] args) {

 

     int v_max = 40; // задано ограничение скорости

     int v = 121; // задана скорость нарушителя    

 

     if ( v <= v_max) {

          System.out.println("Все по правилам!");

     } else if (v <= v_max + 20) {

          System.out.println("не штрафуется");

     } else if (v <= v_max + 40) {

          System.out.println("500");

     } else if (v <= v_max + 60) {

          System.out.println("1000-1500");

     } else if (v <= v_max + 80) {

          System.out.println("2000-2500");

     } else {

          System.out.println("5000");

     }

}

}

 

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

 


 

 

Рис. 3.5. Блок-схема программы вычисления размера штрафа (вложенные развилки)

Пример с усеченными развилками

 

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

 

public class Test2_1 {

 

public static void main(String[] args) {

     int v_max = 40;

     int v = 130;

 

     if ( v <= v_max) {

          System.out.println("Все по правилам!");

     }

     if ((v > v_max) && (v <= v_max + 20)) {

          System.out.println("не штрафуется");

     }

     if ((v > v_max + 20) && (v <= v_max + 40)) {

          System.out.println("500");

     }

     if ((v > v_max + 40) && (v <= v_max + 60)) {

          System.out.println("1000-1500");

     }

     if ((v > v_max + 60) && (v <= v_max + 80)) {

          System.out.println("2000-2500");

     }

     if (v > v_max + 80) {

          System.out.println("5000");

     }

}

    

}

 

 


 

Блок-схема для варианта с усеченной развилкой:

 

 

Рис. 3.6. Блок-схема программы вычисления размера штрафа (усеченные развилки)


Логические операции в Java

 

В примере с усеченными развилками используется операция «&&». Что это такое?

Это одна из логических операций. Вот список всех логических операций, которые могут использоваться для формирования условия развилки:

 

Таблица 3.1

Логические операторы

Оператор

Описание

&

Логическое AND (И)

&&

Сокращенное AND

|

Логическое OR (ИЛИ)

||

Сокращенное OR

^

Логическое XOR (исключающее OR (ИЛИ))

!

Логическое унарное NOT (НЕ)

 

Из таблицы видно, что && – это операция «сокращенное AND».

 

Таблица 1.4

Таблица истинности логических операторов

A В A OR B | || A AND B & && A XOR B ^ NOT A !
false false false false false true
true false true false true false
false true true false true true
true true true true false false

 

В нашей задаче нам нужен именно AND, так как он позволяет задать условие, при котором должны соблюдаться два ограничения ОДНОВРЕМЕННО. Например, максимально разрешенная скорость составляет v=40 км/ч, а водитель едет со скоростью 79 км/ч, тогда сработает условие, которое предписывает ему штраф в 500 рублей:

 

if ((v > v_max + 20) && (v <= v_max + 40)) {

System.out.println("500");

}

Условие сработает, потому что обе части и (v > v_max + 20) и

(v <= v_max + 40) истинны.

Если же скорость водителя будет, например, v = 150 км/ч, то условие (v > v_max + 20) будет истинно, но условие (v <= v_max + 40) ложно, и все условие в целом будет ложно.

 

Обработка исключений

 

В современных языках программирования есть механизм обработки исключений.

В простейшем варианте использования он выглядит так:

 

try {

Строка_кода1_которая_может_выбросить_исключение;

Строка_кода2_которая_может_выбросить_исключение;

Строка_кодаN_которая_может_выбросить_исключение;

} catch (ИМЯ_КЛАССА_ИСКЛЮЧЕНИЯ Объект) {

Сюда_попадает_управление_когда_исключение_выброшено;

} catch (ИМЯ_КЛАССА_ИСКЛЮЧЕНИЯ2 Объект2) {   Сюда_попадает_управление_когда_исключение2_выброшено;

}

 

Этого варианта конструкции try catch Вам будет достаточно для выполнения всех заданий из этих методических указаний.

 

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

 

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

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class Test3 {

 

public static void main(String[] args) {

 

     int t;

     try {

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

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

          BufferedReader br = new BufferedReader(new

             InputStreamReader(System.in));

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

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

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

          String s = br.readLine();

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

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

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

          t = Integer.parseInt(s);

 

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

     } catch (IOException e) {

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

     System.out.println("IOException: "

                    + e.getMessage());

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

     return;

 

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

     } catch (NumberFormatException e) {

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

          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;

 

 

public class A_0 {

public static void 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 (IOException e) {

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

          System.out.println("IOException: "

                    + e.getMessage());

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

          return;

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

     } catch (NumberFormatException e) {

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

          System.out.println("NumberFormatException: "

               + e.getMessage());

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

          return;

     }

         

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

     if (t >–5) {

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

     } else if (t > –20) {

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

     } else {

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

     }

}

}

 

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

 


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

 

Дата: 2019-02-25, просмотров: 292.