Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.02.2017
Сообщений: 18
1

Обработка ошибок

29.10.2018, 07:22. Показов 1116. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, многоуважаемые форумчане. Начал изучать Java и возник следующий вопрос - как обработать крайние положения(возможные ошибки) в следующей программе:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Main {
 
    public static void main(String[] args) {
        System.out.println("Введите операцию:");
        System.out.println("1. Сложение");
        System.out.println("2. Вычитание");
        System.out.println("3. Умножение");
        Scanner scanner = new Scanner(System.in);
        int operation = scanner.nextInt();
        System.out.println("Введите первое число");
        int a = scanner.nextInt();
        System.out.println("Введите второе число");
        int b = scanner.nextInt();
        int result;
        if(operation == 1){
            result = a + b;
        } else if(operation == 2){
            result = a - b;
        } else {
            result = a * b;
        }
        System.out.println("Результат = " + result);
    }
}
Первое, что пришло в голову - использовать конструкцию else и вывод через System.out:

Java
1
2
3
4
5
6
7
8
9
 if(operation == 1){
            result = a + b;
        } else if(operation == 2){
            result = a - b;
        } else if(operation == 3) {
            result = a * b;
        } else {
           System.out.println("Некорректный ввод, ведите число от 1 до 3");
        }
Сам понимаю, что это неверно, т.к. operation у нас int, а вводить мы можем различные символы. Только не дошел еще до того, как эту проблему решить в разрезе Java. Очень был бы рад подсказке более квалифицированных и опытных людей. Желательно максимально просто и сохраняя стилистику программы. Благодарю за внимание
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2018, 07:22
Ответы с готовыми решениями:

Обработка ошибок
работаю в NetBeans'e есть,код,нужно написать обработку ошибок для кода(запретить все символы кроме...

Двойная обработка ошибок
Здравствуйте! У меня метод пробрасывает несколько исключений. Как сделать так, чтобы после...

Обработка ошибок
Не подскажите, где можно найти материал на эту тему..

Обработка ошибок в VB
Доброго времени суток, Уважаемые! Решил добавить в программу обработку ошибок, но работает это...

4
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
29.10.2018, 08:18 2
Arthuric, в принципе можно твой вариант оставить с небольшими правками:
- считывать не инт, а стринг (scan.nextLine) как для операции, так и для чисел
- приводить к инту и если ошибка (ввели не инт или некорректное число для операции <1 или >3) то повторять запрос ввода
- если ввел все же корректное целое то иф или свитч.

Деление не по нраву?
и сразу предлагаю видоизменить задачу -считывать сразу выражение в стиле 2+2, разбирать строку, узнавать что там за знак, какие числа и выдавать результат. Тогда не надо будет выбирать операцию и отдельно два числа вводить.
0
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
29.10.2018, 10:03 3
вот, простейшая реализация слов уважаемого Welemir1 для суммы и произведения двух чисел
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;
 
public class CyberNub {
 
    private static Integer getResultMathOperation(String mathExpress){
        try {
            if (mathExpress.contains("*")) {
                return Integer.parseInt(mathExpress.split("\\*")[0]) *
                        Integer.parseInt(mathExpress.split("\\*")[1]);
            }
            else if (mathExpress.contains("+")) {
                return Integer.parseInt(mathExpress.split("\\+")[0]) +
                        Integer.parseInt(mathExpress.split("\\+")[1]);
            }
        } catch (NumberFormatException | ArrayIndexOutOfBoundsException exp) {
            System.out.println("Ошибка распознования примера! Попробуй еще раз.");
        }
        return null;
    }
 
    public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);
        Integer intgrTmp;
        String strTmp;
        System.out.println("Введи пример вида \'2+3\'. Для выхода \"e\"");
        do {
            strTmp = userInput.next();
            intgrTmp = getResultMathOperation(strTmp);
            if (intgrTmp != null) {
                System.out.println(strTmp + " = " + intgrTmp);
            }
        } while (!"e".equals(strTmp));
    }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
Введи пример '2+3'. Для выхода "e"
11*3
11*3 = 33
11* 3
Ошибка распознования примера! Попробуй еще раз.
11+3
11+3 = 14
11,2+54
Ошибка распознования примера! Попробуй еще раз.
e
Process finished with exit code 0
0
0 / 0 / 0
Регистрация: 02.02.2017
Сообщений: 18
29.10.2018, 11:02  [ТС] 4
Цитата Сообщение от Welemir1 Посмотреть сообщение
- считывать не инт, а стринг (scan.nextLine) как для операции, так и для чисел
- приводить к инту и если ошибка (ввели не инт или некорректное число для операции <1 или >3) то повторять запрос ввода
- если ввел все же корректное целое то иф или свитч.
Попробовал, но понять как от String перейти к int не смог.

То, что указал, многоуважаемый Aviz пока для меня сложно. Хочу именно в первоначальном простеньком виде всё сделать. Не усложняя, а просто разобравшись с типами.
Попробовал так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Main {
 
    public static void main(String[] args) {
        System.out.println("Введите операцию:");
        System.out.println("1. Сложение");
        System.out.println("2. Вычитание");
        System.out.println("3. Умножение");
        Scanner scanner = new Scanner(System.in);
        int operation = scanner.nextInt();
        System.out.println("Введите первое число");
        int a = scanner.nextInt();
        System.out.println("Введите второе число");
        int b = scanner.nextInt();
        int result;
        if ((operation != 1) & (operation != 2) & (operation != 3)){
            System.out.println("Некорректный ввод, введите число от 1 до 3");
        } else if(operation == 1){
            result = a + b;
        } else if(operation == 2){
            result = a - b;
        } else {
           result = a * b;
        }
        System.out.println("Результат = " + result);
    }
}
Но снова result не инициализируется и просит присвоить какое-либо значение.

Добавлено через 12 минут
Вот что получилось)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        System.out.println("Введите операцию:");
        System.out.println("1. Сложение");
        System.out.println("2. Вычитание");
        System.out.println("3. Умножение");
        System.out.println("4. Деление");
        Scanner scanner = new Scanner(System.in);
        int operation = scanner.nextInt();
        System.out.println("Введите первое число:");
        int a = scanner.nextInt();
        System.out.println("Введите второе число");
        int b = scanner.nextInt();
        int result;
        if(operation == 1) {
            result = a + b;
        } else if (operation == 2){
            result = a - b;
        } else if (operation == 3){
            result = a * b;
        } else if (operation == 4) {
            result = a / b;
        }
        else{
            result = 0;
            System.out.println("Некорректный ввод, введите число от 1 до 3");
        }
        System.out.println("Результат = " + result);
    }
}
Теперь есть проверка чисел хотя бы. Два вопроса:
1) Как обойти ввод чисел и сразу увидеть ошибку?
2) Как добавить ошибку при вводе букв и символов?

Добавлено через 1 минуту
Хотя...не очень красиво еще 0 выводится.
0
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
29.10.2018, 11:11 5
попробуй в моем примере ввести с ошибкой и пройдись дебагером https://www.cyberforum.ru/java/thread2250765.html
0
29.10.2018, 11:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2018, 11:11
Помогаю со студенческими работами здесь

Обработка ошибок
Ребят подскажите, как в 1С можно обрабатывать ошибки... Например в lotus в код вставляешь вот такие...

обработка ошибок
Привет! Я реализовываю вывод сообщений пользователю через ajax, и никак не пойму, как это сделать...

Обработка ошибок
Необходимо проверить поля TextBox-а на пустоту. Вопрос банален: как написать процедуру, которая не...

Обработка ошибок
Доброго времени суток ! Суть проста: нажимаю на менюшку, она должна загрузить изображение на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru