Г. Шилдт - С#4.0 Полное руководство (1160795), страница 37
Текст из файла (страница 37)
На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными. Следовательно, оператор гогеас(г циклически опрашивает массив по отдельным его элементам от начала и до конца. Следует, однако, иметь в виду, что переменная цикла в операторе гогеас(т служит только для чтения.
Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива. Ниже приведен простой пример применения оператора цикла гогеас(г. В этом примере сначала создается целочисленный массив и задается ряд его первоначальных значений, а затем эти значения выводятся, а по ходу дела вычисляется их сумма. /! Использовать оператор цикла Гагеао(г. овгпс Вуасеп; сгава Гогеао(гсеио асаггс ногг( магп(( ( Глава 1 Массивы и строки 195 тпг яцш = 0; гпс [ ! пцшя = пен 1пс (10! // Задать первоначальные значения элементов массива пцшя. ГОГ(ЬПГ Ь = — 07 1 < 107 1++) пцшя[1! = 17 // испольэовать цикл гогеасЛ для вывода значений // элементов массива и подсчета их суммы.
ГогеасЛ(ьпс х ьп пцшя) ( Сопяо1е.ыгьсеь1пе("Значение элемента равно: " т х) яцш += х) ) Сопяо1е.ыгтсегьпе (" Сумма равна: " + яцш); Выполнение приведенного выше кода дает следующий результат. Значение элемента Значение элемента Значение элемента Как видите, оператор ЕогеасЛ циклически опрашивает массив по порядку индексирования от самого первого до самого последнего его элемента. Несмотря на то что цикл йогеасЛ повторяется до тех пор, пока не будут опрошены все элементы массива, его можно завершить преждевременно, воспользовавшись оператором Ьгеа)г. Ниже приведен пример программы, в которой суммируются только пять первых элементов массива пцшя.
О Использовать оператор Ьгеах для преждевременного завершения цикла Гогеась. цагин зуясеш; с1аяв Гогеасвоешо ( яга11с чо1г( Маьп() ( ьпс яцш = О) 1пс[) пцшя = пен ьпс[10); // Задать первоначальные значения элементов массива пцшя. ГОГ(1ПГ 1 = 0; 1 < 107 1++) гилля [1) // Испольэовать цикл ГогеасЛ для вывода значений // элементов массива и подсчета их суммы. Значение элемента Значение элемента Значение элемента Значение элемента Значение элемента Значение элемента Значение элемента Сумма равна: 45 равно: 0 равно: 1 равно: 2 равно: 3 равно: 4 равно: 5 равно: б равно: 7 равно: 8 равно: 9 196 Часть!.
Язык СУ Еогеасп(1пг х гп лягая) ( Сопяо1е.нггсевьпе("Значение элемента равно: " + х); ячщ += х; 15(х == 4) Ьгеа)г( // прервать цикл, как только индекс массива достигнет 4 ) сспяс1е.хггсешпе("сумма первых 5 элементов: " + яцщ)( Вот какой результат дает выполнение этой программы. Значение элемента равно: 0 Значение элемента равно: 1 Значение элемента равно: 2 Значение элемента равно: 3 Значение элемента равно: 4 Сумма первых 5 элементов: 10 Совершенно очевидно, что цикл гогеас)т завершается после выбора и вывода значения пятого элемента массива.
Оператор цикла гогеас)т можно также использовать для циклического обращения к элементам многомерного массива. В этом случае элементы многомерного массива возвращаются по порядку следования строк от первой до последней, как демонстрирует приведенный ниже пример программы. // Использовать оператор цикла Гогеасп длн обращения к двумерному массиву. ця1пд Зуягегп с1аяя Гсгеасьоещс2 ( ясас1с нстс Ма1п() ьпг яшя = О) ьпг(,) пцщя = пеи гпг'(3,5]; Задать первоначальные значения элементов массива пыля. Гог(1пг 1 = О; г < 3; 1++) Гсг(1пс 3=0) 3 < 5( пцщя(1 3) = (ьь1) * (3ь1); // Использовать цикл Гогеасп длн вывода значений элементов массива и подсчета их суммы.
Есгеасп (1пг х ьп пцщя) ( Сспяс1е.нг1се51пе("Значение элемента равно: " + х); яшя += х; Сспяо1е.нгьсеьтпе("Сумма равна: " ь яцщ); Выполнение этой программы дает следующий результат. Значение элемента равно: 1 Значение элемента равно: 2 Значение элемента равно: 3 Значение элемента равно: 4 Глава 7. Массивы и строки 197 элемента на: 90 Оператор тогеасЬ допускает циклическое обращение к массиву только в определенном порядке: от начала и до конца массива, поэтому его применение кажется, на первый взгляд, ограниченным.
Но на самом деле это не так. В большом числе алгоритмов, самым распространенным из которых является алгоритм поиска, требуется именно такой механизм. В качестве примера ниже приведена программа, в которой цикл тогеасЬ используется для поиска в массиве определенного значения. Как только это значение будет найдено, цикл прервется. // Поиск в массиве с помощью оператора цикла Гогеасп.
ця1пч Яуягещг с1аяв Зеагсп ( ягаггс котс Иатп() ( 1пп() пцщя = пен тпп(10) тпп на1; Ьоо1 Гоцпо' = Га1яег // Задать первоначальные значения элементов массива пцщя. Гог(тпт 1 = 0; 1 < 101 1++) пцщя(1] = 1) ча1 = 5; У/ Использовать цикл Гогеасп длн поиска заданного // значения в массиве пцщя. Гогеасп(тпя х тп пцщя) ( 15(х == ча1) ( Гоцпя) = сгцег Ьгеати 15(точно) сопяо1е.иггтешпе("Значение найдено!"); При выполнении этой программы получается следующий результат. Значение найдено! Значение Значение Значение Значение Значение Значение Значение Значение Значение Значение Значение Сумма рав элемента элемента элемента элемента элемента элемента элемента элемента элемента элемента равно: 5 равно: 2 равно: 4 равно: б равно: 8 равно: 10 равно: 3 равно: б равно: 9 равно: 12 равно: 15 198 Часть (.
язык С(г Оператор цикла йогеас)г отлично подходит для такого применения, поскольку при поиске в массиве приходится анализировать каждый его элемент. К другим примерам применения оператора цикла йогеасп относится вычисление среднего, поиск минимального или максимального значения среди ряда заданных значений, обнаружение дубликатов и т.д. Как будет показано далее в этой книге, оператор цикла го ге а с)г оказывается особенно полезным для работы с разными типами коллекций. Строки С точки зрения регулярного программирования строковый тип данных ясггпе относится к числу самых важных в С)).
Этот тип определяет и поддерживает символьные строки. В целом ряде других языков программирования строка представляет собой массив символов. А в С() строки являются объектами. Следовательно, тип ясг1пд относится к числу ссылочных. И хотя ясгьпе является встроенным в С() типом данных, его рассмотрение пришлось отложить до тех пор, пока не были представлены классы и объекты. На самом деле класс типа ясгьпо уже не раз применялся в примерах программ, начиная с главы 2, но это обстоятельство выясняется только теперь, когда очередь дошла до строк.
При создании строкового литерала в действительности формируется строковый объект. Например, в следующей строке кода: Сопяоге.вгевеъьпе("В СФ строки являются объектами.") текстовая строка "В С() строки являются объектами." автоматически преобразуется в строковый объект средствами С)). Следовательно, применение класса типа ясгфпо происходило в предыдущих примерах программ неявным образом. А в этом разделе будет показано, как обращаться со строками явным образом.
Построение строк Самый простой способ построить символьную строку — воспользоваться строковым литералом. Например, в следующей строке кода переменной ссылки на строку яг г присваивается ссылка на строковый литерал. явггпэ якг = "Строки в Св весьма эффективны.' В данном случае переменная ясг инициализируется последовательностью символов "Строки в С() весьма эффективны.".
Объект типа ясхзпе можно также создать из массива типа с)тат. Например: сваг() опатову = ('с', 'е', 'з', 'с'); ясгвпс *сг = пен ясгьпо(оваггау)) Как только объект типа я сг фи о будет создан, его можно использовать везде, где только требуется строка текста, заключенного в кавычки. Как показано в приведенном ниже примере программы, объект типа ясгьпя может служить в качестве аргумента при вызове метода В)гь Ве).ьпе () . Создать и вывести символьную строку.
ояьпо Вуякею; Глава 7. Массивы и строки 199 с1азз Бгггпэпещо ( згаг1с тогп Ма1п () ( '): згг1пэ вгг1 = пек зггьпэ(сьаггау); згггпч згг2 = "Еще одна строка."," Сопзо1е.иг1геЬгпе(кгг1) Сопзо1е.нгггеььпе(згг2) ) ) Результат выполнения этой программы приведен ниже. Это строка. Еще одна строка. Обращение со строками Класс типа згг1пд содержит ряд методов для обращения со строками. Некоторые из этих методов перечислены в табл. 7.1.