/
AlexStone
/
Java25sep
Обзор
Документация
Войти
/
AlexStone
/
Java25sep
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
java/tasks 22.html
498 строк
27 KB
unknown
КР 05.11.25
05 ноя 2025, 09:55
05 ноя 2025, 09:55
4a942c9
Код
Авторство
О чём код?
<!DOCTYPE html><html lang="ru"><head><meta charset='utf-8'/><title>22 Выбрасывание исключений</title><style>.check_single { margin:15px; border:1px solid black; padding:5px; width:calc(100% - 40px); } sqrt val { border-top: 1px solid black; } sqrt:before { content:"\221A"; } .section { counter-reset:section; } .section h3:after { counter-increment:section; content: " " counter(section); } table { border-collapse:collapse; } .check_values, .check_values_v2 { width:100%; counter-reset:test_case; } .check_values td:first-child::before { counter-increment:test_case; content: counter(test_case); } table td, table th { border:1px solid black; text-align:center; } .check_values td:first-child, .check_values_v2 td:first-child{ width:40px; } .check_values td, .check_values_v2 td { max-width: 450px; } .lab_nav ol { list-style:none; } .nav { position:fixed; top:0; right:0; margin:15px; clear:both; } .nav ul{ list-style-type:none; padding:0; float:left; } .nav li { margin:2px; border:1px solid black; } .nav li a { display:block; padding:7px; } .task_block { width:80%; page-break-inside:avoid; padding:10px; display:block; } .task_block:target{ background-color:lightgrey; } .task_block:target .task_id{ color:white; } .task_id { float:right; color:lightgrey; } .quiz_block { width:80%; } .quiz_block:target{ background-color:lightgrey; } .task_desc { margin:5px; } .example_image { width:200px; } .lab_nav { width:80%; overflow:auto; } .check_values .preformatted, .preformatted { font-family:monospace; white-space-collapse:preserve; white-space:pre; text-wrap:pretty; text-align:left; padding:10px; } .stream_values tr td:nth-child(3) { border-top-width:0; border-bottom-width:0; text-align:left; } .stream_values tr:nth-child(2) td:nth-child(2) { border-top-width:0; border-bottom-width:0; text-align:right; } .stream_values tr td:nth-child(1){ border-top-width:0; border-bottom-width:0; text-align:right; } .stream_values tr.test_row td:nth-child(2){ text-align:right; } .stream_values tr td:nth-child(2){ border-top-width:0; border-bottom-width:0; text-align:left; } .stream_values .preformatted{ padding: 0; } .stream_values tr.test_row td { border-top-width:1px; } .stream_values tr.test_row td:first-of-type { border-top-width:1px; border-bottom-width:1px; text-align:center; width:15px; } .stream_values tr:last-of-type td { border-bottom-width:1px; } .stream_values { width:100%; } formula { font-weight:bold; text-align:center; vertical-align:middle; } fraction { display:inline-block; text-align:center; vertical-align:middle; font-weight:bold; } formula .abs{ border-left: solid black 1px; border-right: solid black 1px; padding: 2px; } numerator { display:block; border-bottom:2px solid black; } denominator { display:block; } .comment{ color:darkgrey; } .step{ display:none; } .step:last-child, .step:target{ display:block; } .step:target ~ .step:last-child{ display:none; } .console{ background-color:black; color:white; width:300px; } .zoom{ background-color:lightgrey; font-size:40pt; padding:0 10px; } .task_block:target .zoom { background-color:white; }</style><meta name="author" content="Подборка задач, выбор порядка подачи и подготовка тестовых данных - Крюков Александр, Омск 2013-2019"/></head><body class='section'><a name='heading'><h1>Выбрасывание исключений</h1></a><div class='lab_nav'>Другие темы<ol> <li>1 <a href='tasks 1.html'>Печать текста на экран</a></li> <li>2 <a href='tasks 2.html'>Заполнение шаблона данными от пользователя</a></li> <li>3 <a href='tasks 3.html'>Организация вычислений</a></li> <li>4 <a href='tasks 4.html'>Проверка исходных данных</a></li> <li>5 <a href='tasks 5.html'>Запуск программы с известными исходными данными</a></li> <li>6 <a href='tasks 6.html'>Взаимоисключающие случаи</a></li> <li>7 <a href='tasks 7.html'>Работа с интервалами значений</a></li> <li>8 <a href='tasks 8.html'>Реорганизация повторяющихся действий</a></li> <li>9 <a href='tasks 9.html'>Обработка неизвестного объема данных</a></li> <li>10 <a href='tasks 10.html'>Вложенные циклы</a></li> <li>11 <a href='tasks 11.html'>Базовые операции с массивами</a></li> <li>12 <a href='tasks 12.html'>Перестановки элементов массива</a></li> <li>13 <a href='tasks 13.html'>Использование числовых массивов</a></li> <li>14 <a href='tasks 14.html'>Вычисление агрегатов</a></li> <li>15 <a href='tasks 15.html'>Поиск в массиве</a></li> <li>16 <a href='tasks 16.html'>Сортировка вставкой</a></li> <li>17 <a href='tasks 17.html'>Строки</a></li> <li>18 <a href='tasks 18.html'>Чтение файлов</a></li> <li>19 <a href='tasks 19.html'>Запись в файлы</a></li> <li>20 <a href='tasks 20.html'>Возврат значения</a></li> <li>21 <a href='tasks 21.html'>Перехват исключений</a></li> <li>22 <a href='tasks 22.html'>Выбрасывание исключений</a></li> <li>23 <a href='tasks 23.html'>Составные типы данных</a></li> <li>24 <a href='tasks 24.html'>Внутреннее состояние</a></li> <li>25 <a href='tasks 25.html'>Коллекции</a></li> <li>26 <a href='tasks 26.html'>Рекурсия</a></li> <li>27 <a href='tasks 27.html'>Даты</a></li> <li>28 <a href='tasks 28.html'>Комбинаторика</a></li> <li>29 <a href='tasks 29.html'>SQL СУБД</a></li> <li>30 <a href='tasks 30.html'>Псевдослучайные числа</a></li> </ol></div><div class='nav'><ul><li><a href='#heading'>^</a></li><li><a href='#task9354' class='example'>1*</a><li><a href='#task5259' class='example'>2*</a><li><a href='#task9020' class='example'>3*</a><li><a href='#task5871'>4</a><li><a href='#task7799'>5</a><li><a href='#task5170'>6</a><li><a href='#task7891'>7</a></ul></div><div id='task9354' class='task_block'> <div class='task_id'>9354</div> <h3>Задача</h3> <div class='task_desc'> Дана длина ребра куба. Найти площадь его боковой поверхности по формуле <formula>area=6*edge<sup>2</sup></formula>. </div> <ol start='1'><li>Объявите в классе Library публичный статический метод task9354.</li><li>Он принимает в качестве аргумента действительное число (edge).</li><li>Метод возвращает действительное число в качестве результата.</li><li>Если значение аргумента "edge" меньше или равно 0, то метод должен выбросить исключение.</li></ol><div class='task_desc'> Для того, чтобы выбросить исключение, нужно добавить в тело метода следующий код: </div> <div class='check_single preformatted'>if (edge <= 0) { throw new Exception("Значение edge должно быть положительным"); }</div> <div class='task_desc'> Когда метод может выбросить исключение, то в его сигнатуре нужно добавлять выражение throws Exception. Сигнатура этого метода выглядит так: </div> <div class='check_single preformatted'>public static double task9354(double edge) throws Exception</div> <div class='task_desc'> В методе main класса Program добавьте код для проверки: </div> <div class='check_single preformatted'>try { double e = 7; double res = Library.task9354(e);//Если эту команду написать за пределами блока try-catch, то возникнет ошибка компиляции: // java: unreported exception java.lang.Exception; must be caught or declared to be thrown System.out.printf("Площадь поверхности куба равна %.4f", res); res = Library.task9354(7247); System.out.printf("Площадь поверхности куба равна %.4f", res); res = Library.task9354(-11); System.out.printf("Площадь поверхности куба равна %.4f", res); } catch (Exception e) { System.out.println(e.getMessage()); } try { double res = Library.task9354(0); System.out.printf("Площадь поверхности куба равна %.4f", res); } catch (Exception e) { System.out.println(e.getMessage()); }</div> <div class='task_desc'> В результате запуска метода main, в консоли должен появиться следующий текст: </div> <div class='check_single preformatted'>Площадь поверхности куба равна 294,0000 Площадь поверхности куба равна 315114054,0000 Значение edge должно быть положительным Значение edge должно быть положительным </div> </div> <div id='task5259' class='task_block'> <div class='task_id'>5259</div> <h3>Задача</h3> <div class='task_desc'> Вычислить результат по формуле <formula>a<sqrt><val>-7b</val></sqrt></formula>. </div> <ol start='1'><li>В классе Library реализуйте публичный статический метод Task1934.</li><li>Метод Task1934 должен возвращать результат решения задачи для корректных значений исходных данных.</li><li>Если методу были переданы некорректные значения исходных данных, он должен выбросить исключение IllegalArgumentException с сообщением "Подкоренное выражение должно быть неотрицательно".</li><li>В папке с исходным кодом создайте класс Runner1934.</li><li>Создайте метод main в классе Runner1934 по аналогии с методами main из задач прошлых практических.</li><li>Создайте еще один метод в классе Runner1934. Назовите его step1934. Он ничего не возвращает и не принимает аргументов.</li></ol><div class='task_desc'> Исходный код метода main в классе Runner1934 </div> <div class='check_single preformatted'>Scanner s = new Scanner(System.in); System.out.println("Начало работы программы"); System.out.println("Введите значения A и B"); int a, b; a = s.nextInt(); b = s.nextInt(); double result; result = Library.task1934(a, b); System.out.printf("%.4f",result); System.out.println("Программа завершена успешно");</div> <div class='task_desc'> Проверьте, что метод выбрасывает необработанные исключения </div> <table class='check_values_v2'> <tr><th rowspan='2'>Номер теста</th><th colspan='2'>Исходные данные</th><th rowspan='2'>Результат</th></tr><tr> <th>A</th><th>B</th></tr> <tr><td>1</td><td>5</td><td>-11</td><td class='preformatted'>Начало работы программы Введите значения A и B 5 -11 Результат равен 43.8748 Программа завершена успешно</td></tr> <tr><td>2</td><td>-3</td><td>-7</td><td class='preformatted'>Начало работы программы Введите значения A и B -3 -7 Результат равен -21.0000 Программа завершена успешно</td></tr> <tr><td>3</td><td>13</td><td>15</td><td class='preformatted'>Начало работы программы Введите значения A и B 13 15 Exception in thread "main" java.lang.IllegalArgumentException: Подкоренное выражение должно быть неотрицательно at Library.task1934(Library.java:6) at Runner1934.main(Runner1934.java:36)</td></tr> <tr><td>4</td><td>word</td><td>4</td><td class='preformatted'>Начало работы программы Введите значения A и B word Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Runner1934.main(Runner1934.java:35)</td></tr> <tr><td>5</td><td>11</td><td>incorrect</td><td class='preformatted'>Начало работы программы Введите значения A и B 11 word Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Runner1934.main(Runner1934.java:35)</td></tr> </table> <div class='task_desc'> Обработайте исключения </div> <ol start='7'><li>Обработайте IllegalArgumentException так, чтобы на экран выводилось сообщение из исключения "Подкоренное выражение должно быть неотрицательно"</li><li>Обработайте InputMismatchException так, чтобы на экран выводилась фраза "Не удалось преобразовать строку в число"</li><li>Стек вызовов не должен выводиться не экран в случае ошибки</li><li>Фраза "Программа завершена успешно" не должна выводиться на экран в случае ошибки</li><li>Фраза "Результат равен" не должна выводиться на экран в случае ошибки</li></ol><div class='task_desc'> Проверьте, что результат работы совпадает с ожидаемым </div> <table class='check_values_v2'> <tr><th rowspan='2'>Номер теста</th><th colspan='2'>Исходные данные</th><th rowspan='2'>Результат</th></tr><tr> <th>A</th><th>B</th></tr> <tr> <td>6</td><td>5</td><td>-11</td><td class='preformatted'>Начало работы программы Введите значения A и B Результат равен 43,8748 Программа завершена успешно </td></tr> <tr> <td>7</td><td>-3</td><td>-7</td><td class='preformatted'>Начало работы программы Введите значения A и B Результат равен -21,0000 Программа завершена успешно </td></tr> <tr> <td>8</td><td>13</td><td>15</td><td class='preformatted'>Начало работы программы Введите значения A и B Подкоренное выражение должно быть неотрицательно </td></tr> <tr> <td>9</td><td>word</td><td>4</td><td class='preformatted'>Начало работы программы Введите значения A и B Не удалось преобразовать строку в число </td></tr> <tr> <td>10</td><td>11</td><td>incorrect</td><td class='preformatted'>Начало работы программы Введите значения A и B Не удалось преобразовать строку в число </td></tr> </table> </div> <div class="task_block" id="task9020"> <div class="task_id">9020</div> <h3>Задача</h3> <ol> <li>В классе Library реализуйте публичный статический метод task9020 для решения задачи <a href="tasks 4.html#task9020" target="_blank">ЛР4#9020(открыть в новой вкладке)</a>.</li> <li>Метод task9020 должен возвращать результат решения задачи для корректных значений исходных данных.</li> <li>Если методу были переданы некорректные значения исходных данных, он должен выбросить исключение IllegalArgumentException, содержащий текст ошибки из задачи.</li> <li>Проверьте с помощью юнит-теста результат работы метода task9020 в случаях с корректными данными.</li> </ol> <h4>Проверьте юнит-тестами, что метод выбрасывает исключение при некорректных данных</h4> <ol start="6"> <li>В классе TestSuite создайте еще 3 юнит-теста. Назовите их как task9020assertionX, где X - цифра от 1 до 3.</li> <li>Добавьте ему аннотацию @Test с элементом expected равным IllegalArgumentException.class.</li> <li>В теле метода task9020assertionX вызовите метод task9020 класса Library и укажите аргументы, которые приводят к выбрасыванию исключения.</li> <li>После запуска юнит-тестов, они должны быть отмечены зеленым знаком в списке методов.</li> </ol> </div><div class="task_block" id="task5871"> <div class="task_id">5871</div> <h3>Задача</h3> <ol> <li>В классе Library реализуйте публичный статический метод task5871 для решения задачи <a href="tasks 4.html#task5871" target="_blank">ЛР4#5871(открыть в новой вкладке)</a>.</li> <li>Метод task5871 должен возвращать результат решения задачи для корректных значений исходных данных.</li> <li>Если методу были переданы некорректные значения исходных данных, он должен выбросить исключение IllegalArgumentException, содержащий текст ошибки из задачи.</li> <li>Проверьте с помощью юнит-теста результат работы метода task5871 в случаях с корректными данными.</li> </ol> <h4>Проверьте юнит-тестами, что метод выбрасывает исключение при некорректных данных</h4> <ol start="7"> <li>В классе TestSuite создайте еще 3 юнит-теста. Назовите их как task5871assertionX, где X - цифра от 1 до 2.</li> <li>Добавьте этим методам аннотацию @Test с элементом expected равным IllegalArgumentException.class.</li> <li>В теле метода task5871assertionX вызовите метод task5871 класса Library и укажите аргументы, которые приводят к выбрасыванию исключения.</li> <li>После запуска юнит-тестов, они должны быть отмечены зеленым знаком в списке методов.</li> </ol> </div><div class="task_block" id="task7799"> <div class="task_id">7799</div> <h3>Задача</h3> <ol> <li>В классе Library реализуйте публичный статический метод task7799 для решения задачи <a href="tasks 4.html#task7799" target="_blank">ЛР4#7799(открыть в новой вкладке)</a>.</li> <li>Метод task7799 должен возвращать результат решения задачи для корректных значений исходных данных.</li> <li>Если методу были переданы некорректные значения исходных данных, он должен выбросить исключение IllegalArgumentException, содержащий текст ошибки из задачи.</li> <li>Проверьте с помощью юнит-теста результат работы метода task7799 в случаях с корректными данными.</li> </ol> <h4>Проверьте юнит-тестами, что метод выбрасывает исключение при некорректных данных</h4> <ol start="6"> <li>В классе TestSuite cоздайте 1 юнит-тест task7799assertion.</li> <li>Добавьте ему аннотацию @Test с элементом expected равным IllegalArgumentException.class.</li> <li>В теле метода task7799assertion вызовите метод task7799 класса Library и укажите аргументы, которые приводят к выбрасыванию исключения.</li> <li>После запуска юнит-тестов, метод task7799assertion должен быть отмечен зеленым знаком в списке методов.</li> </ol> </div><div class="task_block" id="task5170"> <div class="task_id">5170</div> <h3>Задача</h3> <ol> <li>В классе Library реализуйте публичный статический метод task5170 для решения задачи <a href="tasks 14.html#task5170" target="_blank">ЛР14#5170(открыть в новой вкладке)</a>.</li> <li>Метод task5170 должен возвращать результат решения задачи для корректных значений исходных данных.</li> <li>Если методу были переданы некорректные значения исходных данных, он должен выбросить исключение IllegalArgumentException, содержащий текст ошибки из задачи.</li> <li>Проверьте с помощью юнит-теста результат работы метода task5170 в случаях с корректными данными.</li> </ol> <h4>Проверьте юнит-тестами, что метод выбрасывает исключение при некорректных данных</h4> <ol start="8"> <li>В классе TestSuite создайте юнит-тест, который называется task5170assertion.</li> <li>Добавьте ему аннотацию @Test с элементом expected равным IllegalArgumentException.class.</li> <li>В теле метода task5170assertion вызовите метод task5170 класса Library и укажите аргументы, которые приводят к выбрасыванию исключения.</li> <li>После запуска юнит-тестов, они должны быть отмечены зеленым знаком в списке методов.</li> </ol> </div><div class="task_block" id="task7891"> <div class="task_id">7891</div> <h3>Задача</h3> <h4>Реализуйте метод для решения задачи</h4> <ol> <li>В классе Library реализуйте публичный статический метод task7891.</li> <li>В качестве аргумента он принимает массив целых чисел.</li> <li>В теле функции создайте новый массив. Для каждой пары элементов из исходного массива нужно добавить три элемента в результирующий массив. Первый и второй элемент из тройки - копии исходной пары элементов. Третий элемент из тройки - сумма этой пары элементов. Если в исходном массиве нечетное количество элементов, функция должна выбросить исключение.</li> </ol> <h4>Проверьте корректность работы функции с помощью юнит-тестов</h4> <ol start="4"> <li>Создайте юнит-тест для проверки задачи и подпишите его словами "в задаче 7891 должен получиться корректный результат".</li> <li>Объявите переменные data, actual и expected.</li> <li>Запишите в переменную data массив значений исходных данных для одного теста из задачи. Например 9,8, 7,6, 5,4</li> <li>Запишите в переменную expected массив значений, которые ожидаются в результате работы метода. Например 9,8,17, 7,6,13, 5,4,9</li> <li>Вызовите функцию task7891 и передайте ей переменную data в качестве аргумента.</li> <li>Запишите результат вызова функции в переменную actual.</li> <li>Проверьте, что содержимое массивов actual и expected одинаковое с помощью функции expect в сочетании с функцией toEqual.</li> <li>Проверьте, что содержимое массивов data и validate одинаковое с помощью функции expect в сочетании с функцией toEqual.</li> <li>Проверьте, что метод выбрасывает исключение при некорректных данных.</li> </ol> <table class="check_values"> <tr> <th>Номер теста</th> <th>Вводимые данные (array)</th> <th>Результат</th> </tr> <tr> <td></td> <td>9,8, 7,6, 5,4</td> <td class="preformatted">9,8,17, 7,6,13, 5,4,9</td> </tr> <tr> <td></td> <td>11,13, 17,19, 23,29</td> <td class="preformatted">11,13,24, 17,19,36, 23,29,52</td> </tr> <tr> <td></td> <td>0,0</td> <td class="preformatted">0,0,0</td> </tr> <tr> <td></td> <td></td> <td class="preformatted"></td> </tr> <tr> <td></td> <td>9,8, 7</td> <td class="preformatted">В массиве должно быть четное количество элементов</td> </tr> </table> </div>Версия 20240202. Подборка задач, выбор порядка подачи и подготовка тестовых данных - Крюков Александр, Омск 2013-2026. <a href='https://github.com/AKryukov92/programming-basics'>Основной репозиторий</a></body></html>