На этом шаге мы рассмотрим еще один пример использования исключений.
В следующем примере есть метод, у которого два аргумента: текст и символ. Результатом метод возвращает индекс первого вхождения символа в текст. Если заданного символа в тексте нет, то метод генерирует исключение. Рассмотрим программный код.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr229_1 { // Класс с главным методом: class Program { // Метод для поиска символа в тексте: static int find(string txt, char s) { // Перебор символов в тексте: for(int k = 0; k < txt.Length; k++) { // Если есть совпадение: if(txt[k] == s) return k; } // Генерируется исключение: throw new Exception("Символа \'" + s + "\' в тексте \"" + txt + "\" нет"); } // Главный метод: static void Main() { // Текстовая переменная: string txt; // Символьная переменная: char s; // Целочисленная переменная: int index; // Контролируемый код: try { Console.Write("Введите текст: "); // Считывание текста: txt = Console.ReadLine(); Console.Write("Bведите символ: "); // Считывание символа: s = (char)Console.Read(); // Определение индекса символа в тексте: index = find(txt, s); // Отображение результата: Console.WriteLine("Индекс символа: " + index); } // Обработка исключений: catch(Exception e){ // Описание исключения: Console.WriteLine(e.Message); } // Задержка: Console.ReadLine(); } } }
Возможный результат выполнения программы представлен ниже (здесь и далее выделены введенные пользователем значения):
Рис.1. Результат выполнения программы
Если символа в тексте нет, то результат будет следующим:
Рис.2. Результат выполнения программы
Схему мы использовали простую, напоминающую подход, реализованный в примере предыдущего шага. В статическом методе find() перебираются символы в тексте (первый аргумент), и если символ из текста совпадает с тем символом, который передан вторым аргументом методу, то индекс символа возвращается результатом метода. Если конструкция цикла завершился, а результат не возвращен, то генерируется исключение класса Exception. Описание исключения содержит информацию о том, что данного символа в тексте нет.
В главном методе считывается текст и символ. Затем вызывается метод find(). Команды размещены в try-блоке, а исключения обрабатываются в catch-блоке.
На следующем шаге мы продолжим изучение этого вопроса.