Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Малыхина. Массивы....doc
Скачиваний:
22
Добавлен:
22.05.2015
Размер:
502.27 Кб
Скачать

10.3 Примеры обработки исключений

Пример 1.Оптимизировать программу, производящую простые арифметические операции над числами (сложение, умножение и деление), используя обработку исключительных ситуаций (обработка ввода чисел и операции деления).

Листинг 1

using System;

namespace ConsoleApplication

{

class OurClass

{

static void Main(string[] args)

{

float num1 = 1, num2 = 2, summarize, multiply, divide=0;

int k=0, l=0, d=0;

Console.Write("Введите первое число num1:");

try { num1 = float.Parse(Console.ReadLine()); }

catch

{

Console.WriteLine("Неправильный формат числа!\n" +

"В качестве значения первого числа будет 1");

}

Console.Write("Введите второе число num2:");

try { num2 = float.Parse(Console.ReadLine()); }

catch

{

Console.WriteLine("Неправильный формат числа!\n" +

"В качестве значения второго числа будет 2");

}

k = (int)num1;

l = (int)num2;

ummarize = num1 + num2; multiply = num1 * num2; divide = num1 / num2; ;

Console.WriteLine("num1 + num2 = " + summarize);

Console.WriteLine("num1 * num2 = " + multiply);

Console.WriteLine("num1 / num2 = " + divide);

Console.WriteLine("Целые \nk= " + k + " l= " + l);

try { d = k / l; }

catch (DivideByZeroException)

{

Console.WriteLine("d=k/l= ?");

Console.WriteLine("Нельзя делить на нуль! ");

Console.WriteLine("В качестве результата операции деления будет использовано значение 0");

}

Console.WriteLine("d=k/l="+d);

}

}

}

Ниже приведены три варианта результатов работы программы, обрабатывающие различные ситуации. Вариант 1 демонстрирует обработку исключения, возникающего при неправильном вводе числа num2.

Результаты работы программы вариант 1:

Вариант 2 содержит выводимую информацию в случае, когда программа работает так, что не генерируется ни одно исключение и, следовательно, все обработчики исключений программы игнорируются.

Результаты работы программы вариант 2:

Третий вариант запуска программы демонстрирует перехват исключения DivideByZeroException, генерируемого в ответ на попытку деления целого числа на нуль.

Результаты работы программы вариант 3:

Рассмотрим еще один пример программы, где обрабатывается исключение другого типа. Вернемся к программе поиска наибольшего элемента в массиве, уже рассмотренной в предыдущей главе. Внесем в заголовок последнего цикла следующее изменение:

for (int i = 0; i < n+1; ++i),

где индекс iвыходит за правую границу объявленного диапазона, поскольку изменение индекса массива предусмотрено только от 0 до 5. При попытке использования индекса, равного 6, генерируется исключениеIndexOutOfRangeException. Для перехвата этого исключения сделаем этот цикл внутренним блоком оператораtry,за которым поместим следующуюcatch-инструкцию:

catch (IndexOutOfRangeException)

{

Console.WriteLine("Выход индекса за пределы диапазона");

}

Данная catch-инструкция перехватывает указанное исключение и выводит необходимое сообщение.

Пример 2.Поиск наибольшего элемента в одномерном массиве.

Листинг 2 – Поиск максимального элемента в одномерном массиве

using System;

namespace ConsoleApplication5

{

class Program

{

static void Main(string[] args)

{

const int n = 6;

int[] a = new int[n] { 3, 12, 5, -9, 8, -4 };

Console.WriteLine("Исходный массив:");

for (int i = 0; i < n; ++i)

Console.WriteLine("\t" + a[i]);

Console.WriteLine();

int max = a[0];

try

{

for (int i = 0; i < n+1; ++i)

if (a[i] > max)

max = a[i];

}

catch (IndexOutOfRangeException)

{

Console.WriteLine("Выход индекса за пределы диапазона");

}

Console.WriteLine("Максимальный элемент = " + max);

Console.Read();

}

}

}

Результаты работы программы:

Как же будет работать программа, если перехват данного исключения в ней отсутствует? Ответ один: это исключение все же будет перехвачено, но уже системой исполнения программы языка, которая выдаст сообщение об ошибке и прекратит выполнение программы: