Программирование >>  Программирование с использованием ajax 

1 ... 34 35 36 [ 37 ] 38 39 40 ... 396



Рис. 5.8. Приложение Ch05Ex03 в действии

Описание полученных результатов

Структуры, как и перечисления, объявляются за пределами основного тела кода. В частности, в данном примере структура route объявляется прямо внутри того же пространства имен, что и перечисление orientation, использование которого она подразумевает:

enum orientation : byte {

north = 1, south = 2, east = 3, west = 4

struct route {

public orientation direction; public double distance;

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

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

Интересным моментом, на который стоит обратить внимание, является то, что при обращении к членам route, они обрабатываются в точности тем же образом, что и переменные того же типа обрабатывались бы в качестве члена. Операция присваивания выглядит так:

myRoute.direction = (orientation)myDirection; myRoute.distance = myDistance;

Входное значение можно и просто поместить непосредственно в myRoute. distance безо всяких негативных последствий:

myRoute.distance = Convert.ToDouble(Console.ReadLine());

Такой дополнительный шаг обеспечил бы возможность выполнения дополнительной проверки правильности входных данных, но в коде такой проверки не преду-



смотрено. Любой доступ к членам структуры воспринимается единообразно. Можно сказать, что выражения вида structVar .memberVar в результате вычисления дают переменную типа memberVar.

Массивы

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

Например, предположим, что требуется выполнить некоторую обработку имен всех друзей. Можно объявить простые строковые переменные:

string friendNamel = Robert Harwell ; string friendName2 = Mike Parry ; string friendNameS = Jeremy Beacock ;

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

Однако существует и альтернативный подход, который предусматривает применение массива (array). Массивы - это проиндексированные списки переменных, хранящиеся в единственной переменной типа массива. Например, для хранения трех показанных выше имен можно создать массив под названием f riendNames. Получать доступ к отдельным членам этого массива можно будет указанием их индекса в квадратных скобках:

f riendNames [<индекс>]

Этот индекс представляет собой просто целое число. Для первого элемента в массиве этим числом будет О, для второго - 1 и т.д. Это означает, что по элементам массива можно проходить в цикле:

int i;

for (i = 0; i < 3; i++) {

Console.WriteLine( Name with index of {0}: {1} , i, friendNames[i]);

Вывод имени с определенным индексом

Массивы имеют один единственный базовый тип, т.е. все отдельные вхождения в массиве относятся к одному и тому же типу. Например, базовым типом приведенного здесь в качестве примера массива f riendNames является string, поскольку этот массив предназначен для хранения переменных типа string. Записи в массивах также часто называют элементами.

Объявление массивов

Объявляются массивы следующим образом:

<базовый тип>[] <имя>;

Здесь на месте <базовый тип> может указываться любой тип переменных, включая такие демонстрировавшиеся ранее в главе типы, как перечисления и структуры. Массивы должны обязательно инициализироваться перед тем, как к ним можно будет получить доступ. Получать доступ или присваивать значения элементам массива, как показано ниже, нельзя:



int[] mylntArray; myIntArray[10] = 5;

Инициализировать массивы можно двумя способами: указанием всего содержимого массива в литеральной форме либо указанием размера массива и применением ключевого слова new для инициализации всех его элементов.

Спецификация массива с использованием литеральных значений подразумевает предоставление заключенного в фигурные скобки списка разделенных запятыми значений для элементов:

int[] mylntArray = {5, 9, 10, 2, 99};

Здесь задается массив mylntArray, состоящий из пяти элементов, каждому из которых присваивается целочисленное значение.

Второй подход требует применения следующего синтаксиса:

int [ ] mylntArray = new int[5];

Здесь ключевое слово new используется для явной инициализации массива, а константное значение - для определения его размера. Такой подход приводит к присваиванию все членам массива значения по умолчанию, каковым для числовых типов является 0. Для такой инициализации можно также применять и переменные с неконстантными значениями:

int[] mylntArray = new int[arraySize];

При желании оба подхода можно комбинировать:

int[] mylntArray = new int[5] {5, 9, 10, 2, 99};

В случае применения такой техники размеры должны обязательно совпадать. То есть использовать следующую строку кода нельзя:

int[] mylntArray = new int [10] {5, 9, 10, 2, 99};

Здесь массив определен как состоящий из 10 членов, но инициализированы только 5 членов, поэтому компиляция не удастся. Побочным эффектом такого подхода является еще и то, что если размер определяется через переменную, то эта переменная должна быть обязательно константной:

const int arraySize = 5;

int[] mylntArray = new int [arraySize] (5, 9, 10, 2, 99}; Если опустить слово const, код компилироваться не будет.

Как и другие типы переменных, инициализировать массив в той же самой строке, в которой он объявляется, не обязательно. Например, следующий подход является вполне допустимым:

int[] mylntArray; mylntArray = new int[5];

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

Лра1стическое занятие ИспОЛЬЗОВание масСИВЭ

1. Создайте новое консольное приложение по имени C]i05Ex04 и сохраните его в каталоге С: \BegVCSliarp\C]iapter05.

2. Добавьте в файл Program, cs следующий код:



1 ... 34 35 36 [ 37 ] 38 39 40 ... 396

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