Программирование >>  Обработка исключительных ситуаций 

1 ... 43 44 45 [ 46 ] 47 48 49 ... 142


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

Например, пусть задан массив:

int[] а = {24, 50, 18, 3, 16, -7, 9, -1 };

Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом:

foreach ( int х in а ) Console.WriteLineC х );

Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла.

Ступенчатый массив из листинга 6.4 вывести на экран с помощью оператора foreach немного сложнее, чем одномерный, но все же проще, чем с помощью цикла for:

foreach ( int[] х in а ) {

foreach ( int у in х ) Console.WriteC \t + у ): Console.WriteLineC);

В листинге 6.5 решается та же задача, что и в листинге 6.1, но с использованием цикла foreach. Обратите внимание на то, насколько понятнее стала программа.

Листинг 6.5. Работа с одномерным массивом с использованием цикла foreach using System;

namespace ConsoleApplicationi { class Classl

{ static void MainO

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

Console.WriteLineC Исходн1й массив: ); foreach ( int el em in a )

Console.WriteC \t + elem ); Console.WriteLineC);

long sum = 0; сумма отрицательных элементов

int num =0; количество отрицательных элементов

foreach С int elem in а ) if ( elem < 0 )



138 Глава 6. Массивы и строки

Листинг 6.5 (продолжение)

sum += elem; ++num;

Console.WriteLineC sum = + sum ); Console.WriteLineC num = + num );

int max = a[0]; максимальн1й элемент

foreach ( int elem in a )

if ( elem > max ) max = elem;

Console.WriteLineC max = + max );

А вот как можно переписать метод вывода массива из листинга 6.3:

public static void PrintArrayC string header, Array a ) {

Console.WriteLineC header );

foreach ( object x in a ) Console.WriteC \t + x ); Console.WriteLineC);

Такая запись становится возможной потому, что любой объект может быть неявно преобразован к типу его базового класса, а тип object, как вы помните, является корневым классом всей иерархии. Когда вы продвинетесь в изучении С# до раздела Виртуальные методы (см. с. 178), вы поймете механизм выполнения этого кода, а пока можете просто им пользоваться.

ВНИМАНИЕ-

Ограничением оператора foreach является то, что с его помощью можно только просматривать значения в группе данных, но не изменять их.

Массивы объектов

При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster:

using System;

namespace ConsoleApplicationi

class Monster { .. . } class Classl



Onster CrazyO

health =

ammo

= 94

onsler Crazyl

health =

ammo

= 75

onster Crazy2

health =

ammo

Onster Crazy3

health =

ammo

= 104

Onster Crazy4

health =

ammo

= 114

В программе для получения случайных значений использован стандартный класс Random, который описан далее в этой главе (см. с. 148). В операторе 1 выделяется пять ячеек памяти под ссылки на экземпляры класса Monster?, и эти ссылки заполняются значением null. В цикле 2 создаются пять объектов: операция -ew выделяет память в хипе необходимого для хранения полей объекта объема, а конструктор объекта заносит в эти поля соответствующие значения (выполняется версия конструктора с тремя параметрами). Цикл 3 демонстрирует удобство применения оператора foreach для работы с массивом.

Символы и строки

Обработка текстовой информации является, вероятно, одной из самых распро-.траненных задач в современном программировании, и С# предоставляет для ее г-ешения широкий набор средств: отдельные символы, массивы символов, изменяемые и неизменяемые строки и регулярные выражения.

Символы

Символьный тип char предназначен для хранения символов в кодировке Unicode. Способы представления символов рассматривались в разделе Литералы (см. с. 26). Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Char библиотеки .NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа,

{ static void MainO

Random rnd = new Random(); const int n = 5;

Monster[] stado = new Monster[n]: 1

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

stado[i] = new Monster( rnd.Next( 1, 100 ), rnd.Next( 1, 200 ), Crazy + i .ToStringO ):

foreach ( Monster x in stado ) x.Passport(); 3

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



1 ... 43 44 45 [ 46 ] 47 48 49 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика