KnigaRead.com/
KnigaRead.com » Разная литература » Прочее » Герберт Шилдт - C# 4.0 полное руководство - 2011

Герберт Шилдт - C# 4.0 полное руководство - 2011

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Герберт Шилдт - C# 4.0 полное руководство - 2011". Жанр: Прочее издательство неизвестно, год неизвестен.
Перейти на страницу:

int[] nums = new int[10]    {    99,    10,    100, 18, 78, 23,

63, 9, 87, 49 };

В этом объявлении размер массива nums задается равным 10 явно.

Соблюдение границ массива

Границы массива в C# строго соблюдаются. Если границы массива не достигаются или же превышаются, то возникает ошибка при выполнении. Для того чтобы убедиться в этом, попробуйте выполнить приведенную ниже программу, в которой намеренно превышаются границы массива.

// Продемонстрировать превышение границ массива.

using System;

class ArrayErr {

static void Main() {

int[] sample = new int[10]; int i;

// Воссоздать превышение границ массива. for(i =0; i < 100; i = i+1) sample[i] = i;

Как только значение переменной i достигает 10, возникнет исключительная ситуация типа IndexOutOfRangeException, связанная с выходом за пределы индексирования массива, и программа преждевременно завершится. (Подробнее об исключительных ситуациях и их обработке речь пойдет в главе 13.)

Многомерные массивы

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

Двумерные массивы

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

В следующей строке кода объявляется двумерный массив integer размерами 10x20.

int[,] table = new int[10, 20];

Обратите особое внимание на объявление этого массива. Как видите, оба его размера разделяются запятой. В первой части этого объявления синтаксическое обозначение

[, ]

означает, что создается переменная ссылки на двумерный массив. Если же память распределяется для массива с помощью оператора new, то используется следующее синтаксическое обозначение.

int[10, 20]

В данном объявлении создается массив размерами 10x20, но и в этом случае его размеры разделяются запятой.

Для доступа к элементу двумерного массива следует указать оба индекса, разделив их запятой. Например, в следующей строке кода элементу массива table с координатами местоположения (3,5) присваивается значение 10.

table[3, 5] = 10;

Ниже приведен более наглядный пример в виде небольшой программы, в которой двумерный массив сначала заполняется числами от 1 до 12, а затем выводится его содержимое.

// Продемонстрировать двумерный массив.

using System;

class TwoD {

static void Main() { int t, i;

int[,] table = new int[3, 4];

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

for(i=0; i < 4; ++i) { tablejt,i] = (t*4)+i+l;

• Console.Write(table[t, i] + " ");

}

Console.WriteLine();

}

}

}

В данном примере элемент массива table [ 0, 0 ] будет иметь значение 1, элемент массива table [0,1] — значение 2, элемент массива table [0,2] — значение 3 и т.д. А значение элемента массива table [2,3] окажется равным 12. На рис. 7.1 показано схематически расположение элементов этого массива и их значений.

Рис. 7.1. Схематическое представление массива table, созданного в программе TwoD

СОВЕТ

Если вам приходилось раньше программировать на С, C++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в C# они разделяются запятой.

Массивы трех и более измерений

В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива.

тип[, . . ., ] имя_массива = new тип[размер1, размер2, . . . размеры] ;

Например, в приведенном ниже объявлении создается трехмерный целочисленный массив размерами 4><10хЗ.

int[,,] multidim = new int[4, 10, 3];

А в следующем операторе элементу массива multidim с координатами местоположения (2,4,1) присваивается значение 100.

multidim[2, 4, 1] = 100;

Ниже приведен пример программы, в которой сначала организуется трехмерный массив, содержащий матрицу значений 3х3><3, а затем значения элементов этого массива суммируются по одной из диагоналей матрицы.

// Суммировать значения по одной из диагоналей матрицы 3x3x3.

using System;

class ThreeDMatrix { static void Main() {

int[,,] m = new int[3, 3, 3]; int sum = 0; int n = 1;

for(int x=0; x < 3; x++) for (int y=0; у < 3; y++) for(int z=0; z < 3; z++) m[x, y, z] = n++;

sum = m[0, 0, 0] +m[l, 1, 1] +m[2, 2, 2];

Console.WriteLine("Сумма значений по первой диагонали: " + sum);

}

}

Вот какой результат дает выполнение этой программы.

Сумма значений по первой диагонали: 42

Инициализация многомерных массивов

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

тип[,] имя_мас сив а = {

{val, val, valf ..., val},

{val, val, val, . . ., val},

{val, val, val, . . ., val}

};

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

В качестве примера ниже приведена программа, в которой двумерный массив sqrs инициализируется числами от 1 до 10 и квадратами этих чисел.

// Инициализировать двумерный массив, using System;

class Squares {

static void Main() {

int[,] sqrs = {

{ 1, 1 },

{ 2, 4 Ь {'3, 9 },

{ 4, 16 },

{ 5, 25 },

{ 6, 36 },

{ 7, 49 },

{ 8, 64 },

{ 9, 81 },

{ 10, 100 }

};

int i, j;

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

for(j =0; j < 2; j++)

Console.Write(sqrs[i,j] + " ");

Console.WriteLine();

}

}

}

При выполнении этой программы получается следующий результат.

Ступенчатые массивы

В приведенных выше примерах применения двумерного массива, по существу, создавался так называемый прямоугольный массив. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в C# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.

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

тип[] [] имя_ма с сив а = new тип [размер] [];

где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной. Например, в приведенном ниже фрагменте кода объявляется ступенчатый массив j agged. Память сначала распределяется для его первого измерения автоматически, а затем для второго измерения вручную.

int[][] jagged = new int[3][]; jagged[0] = new int [4]; jagged[1] = new int[3]; jagged[2] = new int[5];

После выполнения этого фрагмента кода массив j agged выглядит так, как показано ниже.

Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива j agged, находящемуся на позиции с координатами (2,1), присваивается значение 10.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*