public class Solution {
public static void main(String[] args) {
try {
System.out.println("Программа работает от забора");
Thread.sleep(1000);
System.out.println("до обеда");
} catch (NullPointerException | NumberFormatException | IllegalStateException | ClassCastException | InterruptedException e) {
Throwable cause = e.getCause();
if (cause instanceof NullPointerException | cause instanceof NumberFormatException)
{
System.out.println("Произошло исключение на букву N");
} else if (cause instanceof IllegalStateException | cause instanceof InterruptedException)
{
System.out.println("Произошло исключение на букву I");
}
else
{
System.out.println("Произошло исключение на букву С");
}
} catch (IllegalArgumentException e) {
System.out.println("Произошло исключение на букву E");
}
}
}
Denis Gritsay
41 уровень
Является ли мое решение наиболее правильным, соответствующим условиям задания. А именно минимальное количество блоков catch
Обсуждается
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
4 октября 2023, 12:08
Было бы не плохо приложить полное условие задачи и желательно изначальное состояние кода, а то не понятно что тут обсуждать.
Но решение выглядит рагульно, я уже молчу что в нем явно какая-то ошибка, потому как IllegalArgumentException не сильно похоже на "Произошло исключение на букву E"
Ну а в целом, зачем тебе вообще ветвление, если эту работу можно положить на catch блок? Он уже "фильтрует" конкретные типы исключений.
Так и в проде не редко встречается, кверяешь какой ни будь апи, он тебе возвращает какой-то эррор, ты этот эррор в декодере оформляешь в кастомные эксепшены и потом отлавливаешь уже, с соответствующей же логикой, что залогать, что скипнуть, на чём упасть....
0
Denis Gritsay
4 октября 2023, 16:27
ну так как я только учусь, думал спросить тех кто опытней, как делать, один в один как в техническом задании или что бы код получался читабельным и лаконичным. И да, там ошибка в
{
IllegalArgumentException не сильно похоже на "Произошло исключение на букву E"
}
нужно добавить еще один else if.
Но в целом я понял, говнокод лучше не писать, даже если он вроде как "отвечает заданию полностью".
0
Денис Enterprise Java Developer
4 октября 2023, 18:14
Ну задание то ты не приложил, потому хз, отвечает твой код ему или нет.
Что точно могу сказать, так это то, что код надо писать читаемым, легко поддерживаемым, легко расширяемым ну и естественно отказоустойчивым.
Лапша из if-ов это нечитаемое говно, особенно учитывая что есть готовые инструменты для выполнения такого рода задачи. Твой код уже поймал исключение и понял какое это исключение, зачем его заставлять делать эту работу дважды?
Я уже молчу, что например некоторые исключения могут появляться чаще других, но в твоем подходе могут усердно проходить все else-if блоки до самого низу, просто потому что нужное расположено в самой жопе :)
Короче не изобретай велосипед, если в условии сказано объединить блоки catch с одинаковыми блоками кода - группируй именно их, не надо пытаться почесать левой пяткой правое ухо.
0
Денис Enterprise Java Developer
4 октября 2023, 18:18
Если вот это вот изначальное состояние задачи:
То решение должно быть вот таким:
Что собственно даже IDE тебе и подскажет.
0
Denis Gritsay
4 октября 2023, 18:22
вот условие:
{
Объедини блоки catch с одинаковым кодом.
Требования:
• Количество блоков catch должно быть минимальным. }
а так да, я понял что лапша это говнокод
0
Денис Enterprise Java Developer
4 октября 2023, 18:25
Нууу и чем тебе три блока catch не минимальное количество?) В данном конкретном случае сделать меньше не получится, блоки кода то у них разные у всех трёх оставшихся.
Понятие минимума крайне контекстно, количество яблок на столе не может быть меньше нуля, минимальное значение Integer -2 миллиарда чего-то там, минимальное значение блоков catch в этой задаче не может быть меньше уникальных блоков кода под ними... очевидно же.
+1
Denis Gritsay
4 октября 2023, 18:31
👍
0
Стас ПасинковSoftware Developer в ZipyMaster
3 октября 2023, 21:28
не бачу в задачі нічого про мінімальну кількість блоків catch. написано лише Объедини блоки catch с одинаковым кодом.
тому один кетч на один прінтлн. якщо кілька іксепшенів на якусь літеру є - вони ловляться одним кетчем (а не різними. можливо тут якась "мінімальність"?)
і жодного іфу.
те, як у вас зроблено зараз - так ніхто не робить. краще групувати їх в кетчах
0
Denis Gritsay
3 октября 2023, 21:34
ні, саме в умовах є вимога щодо мінімальної кількості блоків catch :
{
Объедини блоки catch с одинаковым кодом.
Требования:
• Количество блоков catch должно быть минимальным. }
Гжьньве е у мене і вийшло два блоки а не три
0
Стас ПасинковSoftware Developer в ZipyMaster
3 октября 2023, 21:37
я б робив без іфів. кетчами ловив би шо мені треба, та й все
0
Denis Gritsay
3 октября 2023, 21:39
так, я теж, але тоді умови завдання не виконуються. Я розумію, код кривий, але він відповідає технічним завданням.
0
Стас ПасинковSoftware Developer в ZipyMaster
4 октября 2023, 11:08
я все ж думаю, шо автори задачі думали про мінімальні 3 catch блоки. а не 6, для кожного типу іксепшена свій.
не завжди треба все сприймати буквально) дуже хороший скіл - це вміти щось обговорити. особливо коли сам бачиш, шо получаєцця якийсь говнокод
ЗІ: IllegalArgumentException - на літеру І, а не Е. як і IllegalStateException і InterruptedException
0
Denis Gritsay
4 октября 2023, 16:22
так, я розумію, що написав говнокод і вирішив обговорити з тими, хто краще розуміє та має досвід, що краще робити як у завданні чи робити хороший код, відповідь – хороший код.
0
very junior java developer
3 октября 2023, 18:55
блиин, коллега))) во даёшь))
Мой ответ, ты знаешь. Он есть в обсуждении под задачей. Писать его тут не буду.
Спорить тоже) удачи тебе, без обид.
0
Denis Gritsay
3 октября 2023, 19:05
ок, пусть другие напишут, хочу обсудить. Тебе тоже удачи, особенно в поиске работы.
0