Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
1

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

31.08.2017, 13:16. Показов 4838. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание
Используя Visual Studio, создайте проект по шаблону Console Application.
Создайте класс Calculator.
В теле класса создайте четыре метода для арифметических действий: (Add – сложение, Sub – вычитание, Mul – умножение, Div – деление).
Метод деления должен делать проверку деления на ноль, если проверка не проходит, сгенерировать исключение.
Пользователь вводит значения, над которыми хочет произвести операцию и выбрать саму операцию. При возникновении ошибок должны выбрасываться исключения.

Нужно проверить, правильно ли я отработал исключение /0?
И как к примеру добавить во все методы обработки искл, если ввёл данные не того формата которого требуется?
C#
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Calculator
    {
         public void  Add(int a, int b)
        {
            int c = a + b;
            Console.WriteLine(c);
        }
 
         public void Sub(int a, int b)
         {
             int c = a - b;
             Console.WriteLine(c);
         }
         public void Mul(int a, int b)
         {
             int c = a * b;
             Console.WriteLine(c);
         }
         public void Div(int a, int b)
         {
             try
             {
                int c = a/b;
                Console.WriteLine(c);
             }
             catch (Exception e)
             {
                 Console.WriteLine("Обработка исключения");
                 Console.WriteLine(e.Message);
             }
         }
 
    }
 
    class Programm
    {
        static void Main()
        {
            Console.WriteLine("Выберите действие");
            Console.WriteLine("Введите число ->" );
            string x =  Console.ReadLine();
            int a = Convert.ToInt32(x);
            Console.WriteLine("выбрать действие + - / *");
            string z = Console.ReadLine();
            Console.WriteLine("Введите втрое число ->");
            string y = Console.ReadLine();
            
            int b = Convert.ToInt32(y);
            
            Calculator cal = new Calculator();
            switch (z)
            {
                case "+": cal.Add(a, b);
                    break;
                case "-": cal.Sub(a, b);
                    break;
                case "*": cal.Mul(a, b);
                    break;
                case "/": cal.Div(a, b);
                    break;
                default: Console.WriteLine("Будь человеком");
                    break;
            }
        }
    }
}
Добавлено через 34 минуты
Не понимаю как работать с искл? Что к примеру надо написать в try чтобы обработать искл , если я введу числа =null(точнее ни чего не введу)?

Добавлено через 11 секунд
Не понимаю как работать с искл? Что к примеру надо написать в try чтобы обработать искл , если я введу числа =null(точнее ни чего не введу)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2017, 13:16
Ответы с готовыми решениями:

Обработка исключений
Можно ли в методе А1 обработать исключение, которое создаётся методом А3? Вот схематическое...

Обработка исключений
Вот есть код using System; namespace ARA { public class a24 { public...

Обработка исключений
Опять написал небольшую утилитку для работы с реестром Windows. Точнее программа удаляет некоторые...

Обработка исключений
Уважаемые форумчане! Если идет обработка исключений ввиде try { ... // some code }...

18
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 13:25 2
ShmelVG,
C#
1
2
3
4
5
6
7
8
try
{
    Console.WriteLine(a/b);
}
catch ()
{
    Console.WriteLine("Ошибка, деление на 0");
}
1
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.08.2017, 13:30 3
Цитата Сообщение от ShmelVG Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
            Console.WriteLine("Выберите действие");
            Console.WriteLine("Введите число ->" );
            string x =  Console.ReadLine();
            int a = Convert.ToInt32(x);
            Console.WriteLine("выбрать действие + - / *");
            string z = Console.ReadLine();
            Console.WriteLine("Введите втрое число ->");
            string y = Console.ReadLine();
            
            int b = Convert.ToInt32(y);
Вот эту часть тоже в try catch сделай, чтобы если в int32 введенное в консоли перевести не удалось, то программа не вылетала, а исключение генерировалось.
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 13:36  [ТС] 4
Цитата Сообщение от kingzfate Посмотреть сообщение
catch ()
- Требуется тип класса
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 13:38 5
ShmelVG, скобки убери после catch, забыл что-то..
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 13:46  [ТС] 6
kingzfate, Странно, делю на 0 и пишет необработанное исключение(

Добавлено через 48 секунд
Chizel, вот я и не могу догнать что в какой блок раскидать)

Добавлено через 1 минуту
kingzfate, А, всё, получилось)Убрал int c = a/b;
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 13:47 7
Лучший ответ Сообщение было отмечено ShmelVG как решение

Решение

ShmelVG, значит вы что-то делаете не так, вот пример
C#
1
2
3
4
5
6
7
try
            {
                int a = 1;
                int b = 0;
                Console.WriteLine(a / b);
            }
            catch { Console.WriteLine("Все плохо"); }
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 14:01  [ТС] 8
kingzfate, а как добавить ещё исключение если надо обезопасить от ввода null в a и b?
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 14:05 9
ShmelVG, вместо обычного ввода А пишешь эти строки
C#
1
2
while (!int.TryParse(Console.ReadLine(), out a))
                            Console.WriteLine("Введите число");
И так же с b,
1
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.08.2017, 14:52 10
Лучший ответ Сообщение было отмечено ShmelVG как решение

Решение

Цитата Сообщение от ShmelVG Посмотреть сообщение
Chizel, вот я и не могу догнать что в какой блок раскидать)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
{
            Console.WriteLine("Выберите действие");
            Console.WriteLine("Введите число ->" );
            string x =  Console.ReadLine();
            int a = Convert.ToInt32(x);
            Console.WriteLine("выбрать действие + - / *");
            string z = Console.ReadLine();
            Console.WriteLine("Введите втрое число ->");
            string y = Console.ReadLine();
            
            int b = Convert.ToInt32(y);
}
catch { Console.WriteLine("Вы ввели какую то хрень, вместо числа");
И еще, почему числа считываются и отображаются целочисленным типом, если в списке операций есть деление. Рекомендую на float сменить, а то 8 / 3 = 2 как то не очень мне кажется.
1
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 15:05  [ТС] 11
kingzfate, что-то ни как не получается ((...Вы могли показать на моём примере(чуть больше кода)

Добавлено через 4 минуты
Chizel, Круто!Спасибо)) Но честно, не понимаю как он обработал именно эту ошибку? Как он понял что имеено nall будет, а не другие искл? Или все искл в Exception уже есть и он автоматом определяет какое исключение?

Добавлено через 35 секунд
Chizel, Круто!Спасибо)) Но честно, не понимаю как он обработал именно эту ошибку? Как он понял что имено nall будет, а не другие искл? Или все искл в Exception уже есть и он автоматом определяет какое исключение?

Добавлено через 47 секунд
(инет лагает )"именно
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 15:12 12
ShmelVG, то что сделал Chizel, обработает любую ошибку в данном контексте
0
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.08.2017, 15:14 13
ShmelVG, Все исключения наследуются от одного, самого главного. В данном случае вряд ли в этом коде еще может возникнуть какое то исключение, кроме того, что при Convert.ToInt32 вывалится, что строка не может быть сконвертирована в число. Поэтому я не заморачиваясь и написал тебе
C#
1
catch { Console.WriteLine("Вы ввели какую то хрень, вместо числа");
Можешь вместо этого написать
C#
1
catch(Exception ex) { Console.WriteLine(ex.ToString());
То тогда он тебе в консоль много чего понапишет, в том числе и какое именно исключение было обработано.
По идее ты должен обработать его, для ввода ерунды вместо чисел. Если есть еще какие то исключения, то обрабатывай их в следующих блоках catch в порядке иерархии от низшего к высшему, чтобы при разных исключениях у тебя разные сообщения выводились.
1
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 15:29  [ТС] 14
Chizel, т.е. по идее в реале все коды должны быть разбиты по частям и находиться в try/catch?
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 15:34 15
ShmelVG, если приложение не большое, то да. А если уже какой то корпоративный проект, то от этого вызова лучше отказаться, он может "есть" очень много памяти если не уследить за ним.
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 15:36  [ТС] 16
Chizel,
Цитата Сообщение от Chizel Посмотреть сообщение
catch(Exception ex) { Console.WriteLine(ex.ToString());
попробовал так и при делении целого на 0 выдаёт "бесконечность"....что это?))))
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
31.08.2017, 15:49 17
ShmelVG, ну правильно, если делить на 0 будет бесконечность, т.е. математическая бесконечность представляет собой такую величину, которую теоретически и практически невозможно вычислить.
0
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.08.2017, 16:02 18
ShmelVG, Кто куда выдает? Блок catch срабатывает?

Добавлено через 11 минут
Тебе нужно, чтобы при делении на ноль возникало исключение? Если да, то вот так можно сделать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            try
            {
                Console.WriteLine("Выберите действие");
                Console.WriteLine("Введите число ->");
                string x = Console.ReadLine();
                int a = Convert.ToInt32(x);
                Console.WriteLine("выбрать действие + - / *");
                string z = Console.ReadLine();
                Console.WriteLine("Введите втрое число ->");
                string y = Console.ReadLine();
                int b = Convert.ToInt32(y);
                if (b == 0 && z == "/") { throw new Exception("Деление на ноль запрещено!!!"); }
            }
            catch(Exception ex) { Console.WriteLine(ex.Message); }
1
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
31.08.2017, 16:29  [ТС] 19
Оке, гляну)
0
31.08.2017, 16:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2017, 16:29
Помогаю со студенческими работами здесь

Обработка исключений
Здравствуйте. Мне поставлена задача - сделать математически простую программу (перевод одних...

Обработка исключений
подскажите почему не выводится на экран? Console.Write("Введите 1 для повтора...

Обработка исключений
Здравствуйте! Такая проблема, что надо сделать обработку исключений, если пользователь вместо цифры...

Обработка исключений
В учебной задачке необходимо обрабатывать все исключительные ситуации. Через блок...


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

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