Не работает программа, исключения - C#
Формулировка задачи:
Всем привет, очень нужна помощь в доработке программы.
Код
При работе возникает сбой, нужно чтобы при вводе (букв или другом некорректном вводе) обрабатывалось исключение.
P.S. С классами работаю совсем недавно, как сделать чтобы результат из catch (вывод сообщений) выводился в классе Program.
Заранее спасибо.
class Program { static void Main(string[] args) { int k;//для кол-ва членов ряда double x;//значение переменной х WordsinstedNumber z = new WordsinstedNumber(); Console.Write("Введите значение переменной x: "); do { x = double.Parse(Console.ReadLine()); z.NumberX(x);//проверка числа } while (x == 0); Console.Write("Введите количество членов ряда k: "); do { k = int.Parse(Console.ReadLine()); z.NumberK(k);//проверка числа } while (k < 1); z.Raschet(k, x); Console.ReadKey(); } } public class WordsinstedNumber: Exception { /// <summary> /// проверка на корректность ввода значения /// </summary> /// <param name="x">проверяемое число</param> public void NumberK(int x) { int i = 0; try { if (i != Convert.ToInt32(x)) throw new WordsinstedNumber(); } catch (WordsinstedNumber) { Console.WriteLine("Введите значение сново."); } } /// <summary> /// проверка на равенство нулю /// </summary> /// <param name="x">проверяемое число</param> public void NumberX(double x) { double i = 0; try { if (x == 0) throw new DivideByZeroException();// исключение при попытке деления на 0 if ( i != Convert.ToDouble(x)) throw new WordsinstedNumber(); } catch (DivideByZeroException ex) { Console.WriteLine("Exception: " + ex.GetType().Name + " " + ex.Message); Console.WriteLine("Введите число сново."); } catch (WordsinstedNumber ex) { Console.WriteLine("Exception: " + ex.GetType().Name + " " + ex.Message); Console.WriteLine("Вы ввели буквы. Введите число заново."); } } /// <summary> /// расчет исходного ряда /// </summary> /// <param name="k">кол-во членов ряда</param> /// <param name="x">значение переменной</param> public void Raschet(int k, double x) { int l; double sum = 0; //расчет ряда bool flag = false; do { try { Console.Write("Введите длину массива l: "); while (!int.TryParse(Console.ReadLine(), out l)) { Console.WriteLine("Введите число."); } double[] mass = new double[l]; for (int i = 1; i <= k; i++) { sum += Math.Pow(-1, i + 1) / (2 * x - 1); mass[i - 1] += sum; } flag = false; } catch (IndexOutOfRangeException) // исключение - индекс за пределами массива { Console.WriteLine("Выход за пределы границы массива. Введите длину массива l сново."); flag = true; } } while (flag); Console.WriteLine("Результат:\t" + sum); } }
Решение задачи: «Не работает программа, исключения»
textual
Листинг программы
class Program { static void Main(string[] args) { int k;//для кол-ва членов ряда double x;//значение переменной х try { WordsinstedNumber z = new WordsinstedNumber(); Console.Write("Введите значение переменной x: "); do { x = double.Parse(Console.ReadLine()); z.NumberX(x);//проверка числа } while (x == 0); Console.Write("Введите количество членов ряда k: "); do { k = int.Parse(Console.ReadLine()); z.NumberK(k);//проверка числа } while (k < 1); z.Raschet(k, x); Console.ReadKey(); } catch(ArgumentException) { Console.WriteLine("не корректно введено какоето поле"); } catch(Exception e) { Console.WriteLine(e.Message); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д