1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
1
.NET 4.x

Ошибка ArgumentNulException не обработано

04.10.2013, 15:39. Показов 618. Ответов 16
Метки нет (Все метки)

Пытаюсь написать калькулятор в командной строке. При попытке отладки вылетает ошибка ArgumentNulException не обработано на строке
C#
1
if (zadacha.Contains('='))
вот весь класс если что
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Калькулятор
{
    static class Program
    {
       
 
        [STAThread]
        static void Main()
        {
            
            Calc calc1 = new Calc();
                Calc calc2 = null;
            
        
        
    }
}
 
    class Calc
    {
        public Calc()
        {
            Console.WriteLine("Привет, я Калькулятор");
            Console.WriteLine("Введи числовое уравнение в формате a+b+c=");
            string zadacha;
            zadacha = Console.ReadLine();
            if (zadacha.Contains('='))
            {
 
 
                #region переменные
                string StrokaVvoda;
                string pervoechislo;
                string vtoroechislo;
                string treteechislo;
                char pz;
                char vz;
                int dlinastroki;
                int num = 0;
                char tekushiyznak;
                double a;
                double b;
                double c;
 
                #endregion
                #region механизм считывания строки и деления ее на составляющие
                StrokaVvoda = zadacha;
                dlinastroki = StrokaVvoda.Length;
                tekushiyznak = StrokaVvoda[0];
                List<char> _pervoechislo = new List<char>();
                for (int i = 0; i < dlinastroki; i++)
                {
                    tekushiyznak = StrokaVvoda[i];
 
                    num++;
 
                    if (Char.IsDigit(tekushiyznak))
                    {
                        _pervoechislo.Add(tekushiyznak);
                    }
                    else
                    {
 
                    }
                }
                pz = StrokaVvoda[num];
                List<char> _vtoroechislo = new List<char>();
                for (int i = num++; i < dlinastroki; i++)
                {
                    tekushiyznak = StrokaVvoda[i];
                    num++;
                    if (Char.IsDigit(tekushiyznak))
                    {
                        _vtoroechislo.Add(tekushiyznak);
                    }
                    else
                    {
 
                    }
                }
                vz = StrokaVvoda[num];
                List<char> _treteechislo = new List<char>();
                for (int i = num++; i < dlinastroki; i++)
                {
                    tekushiyznak = StrokaVvoda[i];
                    num++;
                    if (Char.IsDigit(tekushiyznak))
                    {
                        _treteechislo.Add(tekushiyznak);
                    }
                    else
                    {
                        return;
                    }
                }
 
                _pervoechislo.Reverse();
                _vtoroechislo.Reverse();
                _treteechislo.Reverse();
 
                pervoechislo = Char.ToString(_pervoechislo[_pervoechislo.Count]);
                vtoroechislo = Char.ToString(_vtoroechislo[_vtoroechislo.Count]);
                treteechislo = Char.ToString(_treteechislo[_treteechislo.Count]);
 
                a = Convert.ToDouble(pervoechislo);
                b = Convert.ToDouble(vtoroechislo);
                c = Convert.ToDouble(treteechislo);
                #endregion
                #region Математические операции
                if (pz == '+' && vz == '+')
                {
                    Console.WriteLine(a + b + c);
                }
                else if (pz == '+' && vz == '-')
                {
                    Console.WriteLine(a + b - c);
                }
                else if (pz == '+' && vz == '*')
                {
                    Console.WriteLine(a + b * c);
                }
                else if (pz == '+' && vz == '/')
                {
                    Console.WriteLine(a + b / c);
                }
                else if (pz == '-' && vz == '+')
                {
                    Console.WriteLine(a - b + c);
                }
                else if (pz == '-' && vz == '-')
                {
                    Console.WriteLine(a - b - c);
                }
                else if (pz == '-' && vz == '*')
                {
                    Console.WriteLine(a - b * c);
                }
                else if (pz == '-' && vz == '/')
                {
                    Console.WriteLine(a - b / c);
                }
                else if (pz == '/' && vz == '-')
                {
                    Console.WriteLine(a - b - c);
                }
                else if (pz == '/' && vz == '+')
                {
                    Console.WriteLine(a / b + c);
                }
                else if (pz == '/' && vz == '*')
                {
                    Console.WriteLine(a / b * c);
                }
                else if (pz == '/' && vz == '/')
                {
                    Console.WriteLine(a / b / c);
                }
                else if (pz == '*' && vz == '-')
                {
                    Console.WriteLine(a * b - c);
                }
                else if (pz == '*' && vz == '+')
                {
                    Console.WriteLine(a * b + c);
                }
                else if (pz == '*' && vz == '/')
                {
                    Console.WriteLine(a * b / c);
                }
                else if (pz == '*' && vz == '*')
                {
                    Console.WriteLine(a * b * c);
                }
                #endregion
            }
 
        }
 
    }
 
}
Подскажите плиз, где я сделал ошибку? Заранее спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2013, 15:39
Ответы с готовыми решениями:

Ошибка NullReferenceException не обработано
Надо написать код, который реализует операции на списке целых чисел (односвязный список). У меня...

Ошибка formatexception не обработано
Добрый день. Пишу программу для построения графка. Суть: из textBox1 считывает значения x, из...

COMException не обработано. Ошибка 80040154
Добрый день, пытаюсь запустить приложение, и получаю ошибку. Раньше все работало нормально, а...

Ошибка TargetInvocationException не обработано
Парни вот фрагмент когда, из-за чего может быть ошибка? if (k ==...

16
191 / 191 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.10.2013, 15:48 2
Может вы ничего не вводите и нажимаете интер?
0
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 16:01  [ТС] 3
Добавил
C#
1
2
3
if (zadacha != null)
{
}
ошибку больше не выдает, теперь просто молча не копилируется
0
191 / 191 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.10.2013, 16:02 4
Вы вводите что нибудь после того как видите на экране "Введи числовое уравнение в формате a+b+c=" ??
0
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 16:07  [ТС] 5
Нет, командная строка даже не появляется просто при отладке мигает экран и все остается как есть
0
539 / 540 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
04.10.2013, 16:17 6
C#
1
2
3
4
5
6
#region механизм считывания строки и деления ее на составляющие    
string [] arr = zadacha.Split('+', '=', '/', '*', '-');
double first = double.Parse(arr[0]);
double second = double.Parse(arr[1]);
double third = double.Parse(arr[2]);
#endregion
1
191 / 191 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.10.2013, 16:21 7
У меня всё запускается и падаешь ошибка совсем в другом месте
0
539 / 540 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
04.10.2013, 16:26 8
Не правильно находятся pz и vz.
0
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 16:32  [ТС] 9
Цитата Сообщение от buntar Посмотреть сообщение
C#
1
2
3
4
5
6
#region механизм считывания строки и деления ее на составляющие    
string [] arr = zadacha.Split('+', '=', '/', '*', '-');
double first = double.Parse(arr[0]);
double second = double.Parse(arr[1]);
double third = double.Parse(arr[2]);
#endregion
спасибо, это помогло сильно укоротить код
теперь он выглядит вот так
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Калькулятор
{
    static class Program
    {
 
 
        [STAThread]
        static void Main()
        {
 
            Calc calc1 = new Calc();
 
        }
 
        class Calc
        {
            public Calc()
            {
                Console.WriteLine("Привет, я Калькулятор");
                Console.WriteLine("Введите числовое уравнение в формате a+b+c=");
                string zadacha;
                zadacha = Console.ReadLine();
                if (zadacha != null)
                {
                    if (zadacha.Contains('='))
                    {
                        #region переменные
                        char pz;
                        char vz;
                        double a;
                        double b;
                        double c;
                        #endregion
 
                        #region механизм считывания строки и деления ее на составляющие
                        string[] chisla = zadacha.Split('-', '+', '*', '/');
                        a = double.Parse(chisla[0]);
                        b = double.Parse(chisla[1]);
                        c = double.Parse(chisla[2]);
                        string[] znaki = zadacha.Split('1','2','3','4','5','6','7','8','9','0','.','=');
                        pz = char.Parse(znaki[0]);
                        vz = char.Parse(znaki[1]);
                        #endregion
                        #region Математические операции
                        if (pz == '+' && vz == '+')
                        {
                            Console.WriteLine(a + b + c);
                        }
                        else if (pz == '+' && vz == '-')
                        {
                            Console.WriteLine(a + b - c);
                        }
                        else if (pz == '+' && vz == '*')
                        {
                            Console.WriteLine(a + b * c);
                        }
                        else if (pz == '+' && vz == '/')
                        {
                            Console.WriteLine(a + b / c);
                        }
                        else if (pz == '-' && vz == '+')
                        {
                            Console.WriteLine(a - b + c);
                        }
                        else if (pz == '-' && vz == '-')
                        {
                            Console.WriteLine(a - b - c);
                        }
                        else if (pz == '-' && vz == '*')
                        {
                            Console.WriteLine(a - b * c);
                        }
                        else if (pz == '-' && vz == '/')
                        {
                            Console.WriteLine(a - b / c);
                        }
                        else if (pz == '/' && vz == '-')
                        {
                            Console.WriteLine(a - b - c);
                        }
                        else if (pz == '/' && vz == '+')
                        {
                            Console.WriteLine(a / b + c);
                        }
                        else if (pz == '/' && vz == '*')
                        {
                            Console.WriteLine(a / b * c);
                        }
                        else if (pz == '/' && vz == '/')
                        {
                            Console.WriteLine(a / b / c);
                        }
                        else if (pz == '*' && vz == '-')
                        {
                            Console.WriteLine(a * b - c);
                        }
                        else if (pz == '*' && vz == '+')
                        {
                            Console.WriteLine(a * b + c);
                        }
                        else if (pz == '*' && vz == '/')
                        {
                            Console.WriteLine(a * b / c);
                        }
                        else if (pz == '*' && vz == '*')
                        {
                            Console.WriteLine(a * b * c);
                        }
                        #endregion
                    }
                    else Console.WriteLine("Введите уравнение");
                }
 
            }
 
        }
 
    }
 
}
но работать по прежнему не хочет, ошибки не вылетают, но при этом не компилируется
0
191 / 191 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.10.2013, 16:37 10
не может быть. вы F5 нажимаете или что-то другое?
0
539 / 540 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
04.10.2013, 16:40 11
Конечно, говнокод, но работает...
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Калькулятор
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Calc calc1 = new Calc();
            //Calc calc2 = null;
        }
    }
 
    class Calc
    {
        public Calc()
        {
            Console.WriteLine("Привет, я Калькулятор");
            Console.WriteLine("Введи числовое уравнение в формате a+b+c=");
            string zadacha;
            zadacha = Console.ReadLine();
            if (zadacha.Contains("="))
            {
                #region переменные
                char pz;
                char vz;
                #endregion
 
                #region механизм считывания строки и деления ее на составляющие
                string [] arr = zadacha.Split('+', '=', '/', '*', '-');
                double a = double.Parse(arr[0]);
                double b = double.Parse(arr[1]);
                double c = double.Parse(arr[2]);
 
                string simb = string.Empty;
                foreach (char s in zadacha)
                    if (!Char.IsDigit(s)) simb += s;
 
                pz = simb[0];
                vz = simb[1];
                #endregion
 
                #region Математические операции
                if (pz == '+' && vz == '+')
                    Console.WriteLine(a + b + c);
 
                else if (pz == '+' && vz == '-')
                    Console.WriteLine(a + b - c);
 
                else if (pz == '+' && vz == '*')
                    Console.WriteLine(a + b * c);
 
                else if (pz == '+' && vz == '/')
                    Console.WriteLine(a + b / c);
 
                else if (pz == '-' && vz == '+')
                    Console.WriteLine(a - b + c);
 
                else if (pz == '-' && vz == '-')
                    Console.WriteLine(a - b - c);
                
                else if (pz == '-' && vz == '*')
                    Console.WriteLine(a - b * c);
                
                else if (pz == '-' && vz == '/')
                    Console.WriteLine(a - b / c);
                
                else if (pz == '/' && vz == '-')
                    Console.WriteLine(a - b - c);
                
                else if (pz == '/' && vz == '+')
                    Console.WriteLine(a / b + c);
                
                else if (pz == '/' && vz == '*')
                    Console.WriteLine(a / b * c);
                
                else if (pz == '/' && vz == '/')
                    Console.WriteLine(a / b / c);
                
                else if (pz == '*' && vz == '-')
                    Console.WriteLine(a * b - c);
                
                else if (pz == '*' && vz == '+')
                    Console.WriteLine(a * b + c);
                
                else if (pz == '*' && vz == '/')
                    Console.WriteLine(a * b / c);
                
                else if (pz == '*' && vz == '*')
                    Console.WriteLine(a * b * c);
                #endregion
            }
        }
    }
}
1
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 16:42  [ТС] 12
второй вариант, мне он больше нравиться . перетащил проверку в Мейн, до вызова екземпляра класса.
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Калькулятор
{
    static class Program
    {
 
 
        [STAThread]
        static void Main()
        { 
                string zadacha;
                zadacha = Console.ReadLine();
                Console.WriteLine("Привет, я Калькулятор");
                Console.WriteLine("Введите числовое уравнение в формате a+b+c=");
                Console.ReadLine();
               if (zadacha != null)
                { 
                   if (zadacha.Contains('='))
                {
                    Calc calc1 = new Calc();
                }
                
               }
        }
 
        class Calc
        {
            public Calc()
            {
                string zadacha = Console.ReadLine();
                        #region переменные
                        char pz;
                        char vz;
                        double a;
                        double b;
                        double c;
                        #endregion
 
                        #region механизм считывания строки и деления ее на составляющие
                        string[] chisla = zadacha.Split('-', '+', '*', '/');
                        a = double.Parse(chisla[0]);
                        b = double.Parse(chisla[1]);
                        c = double.Parse(chisla[2]);
                        string[] znaki = zadacha.Split('1','2','3','4','5','6','7','8','9','0','.','=');
                        pz = char.Parse(znaki[0]);
                        vz = char.Parse(znaki[1]);
                        #endregion
                        #region Математические операции
                        if (pz == '+' && vz == '+')
                        {
                            Console.WriteLine(a + b + c);
                        }
                        else if (pz == '+' && vz == '-')
                        {
                            Console.WriteLine(a + b - c);
                        }
                        else if (pz == '+' && vz == '*')
                        {
                            Console.WriteLine(a + b * c);
                        }
                        else if (pz == '+' && vz == '/')
                        {
                            Console.WriteLine(a + b / c);
                        }
                        else if (pz == '-' && vz == '+')
                        {
                            Console.WriteLine(a - b + c);
                        }
                        else if (pz == '-' && vz == '-')
                        {
                            Console.WriteLine(a - b - c);
                        }
                        else if (pz == '-' && vz == '*')
                        {
                            Console.WriteLine(a - b * c);
                        }
                        else if (pz == '-' && vz == '/')
                        {
                            Console.WriteLine(a - b / c);
                        }
                        else if (pz == '/' && vz == '-')
                        {
                            Console.WriteLine(a - b - c);
                        }
                        else if (pz == '/' && vz == '+')
                        {
                            Console.WriteLine(a / b + c);
                        }
                        else if (pz == '/' && vz == '*')
                        {
                            Console.WriteLine(a / b * c);
                        }
                        else if (pz == '/' && vz == '/')
                        {
                            Console.WriteLine(a / b / c);
                        }
                        else if (pz == '*' && vz == '-')
                        {
                            Console.WriteLine(a * b - c);
                        }
                        else if (pz == '*' && vz == '+')
                        {
                            Console.WriteLine(a * b + c);
                        }
                        else if (pz == '*' && vz == '/')
                        {
                            Console.WriteLine(a * b / c);
                        }
                        else if (pz == '*' && vz == '*')
                        {
                            Console.WriteLine(a * b * c);
                        }
                        #endregion
                }
 
            }
 
        }
 
    }
Цитата Сообщение от da1z Посмотреть сообщение
не может быть. вы F5 нажимаете или что-то другое?
да, я нажимаю Ф5
0
191 / 191 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.10.2013, 16:46 13
так уже всё работает?)
0
539 / 540 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
04.10.2013, 16:47 14
Цитата Сообщение от da1z Посмотреть сообщение
так уже всё работает?)
Написано-же:
Цитата Сообщение от buntar Посмотреть сообщение
Конечно, говнокод, но работает...
0
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 16:56  [ТС] 15
Да действительно заработало. Правда не до конца. Команда строка начала появляться, даже просит ввести уравнение. Но реакция на знак = почему то нулевая. А ведь по идее именно наличие знака = должно запустить класс.
0
da1z
04.10.2013, 17:09
  #16

Не по теме:

Цитата Сообщение от buntar Посмотреть сообщение
Написано-же:

Не по теме:

Просто у меня и в первоначальном варианте работало. Вот я и поинтересовался

0
1 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 65
04.10.2013, 17:16  [ТС] 17
Цитата Сообщение от da1z Посмотреть сообщение

Не по теме:



Не по теме:

Просто у меня и в первоначальном варианте работало. Вот я и поинтересовался

к сожалению у меня толком не работает до сих пор. А расчет у тебя производится?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2013, 17:16

Ошибка: COMException не обработано при работе с Word
Здравствуйте. Пытаюсь воспроизвести один пример с сайта, но подставив свои шаблон документа....

Ошибка FormatException не обработано при вычислении среднего балла
Добрый день. Написал простенькую программу вычисления среднего балла по трем предметам. После...

HttpWebResponse: ошибка "WebException не обработано"
public string get_html(string adress) // процедура получения html кода страницы { ...

Ошибка "Исключение не обработано"
Фрагмент программы. Выдается ошибка &quot;Исключение не обработано&quot;. Подскажите, пожалуйста, что делать?...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.