Не работает программа, исключения - 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);
}
}
}