Страница 72 из 502
<b>class Average {</b>
<b> static void Main() {</b>
<b> int[] nums = { 99, 10, 100, 18, 78, 23,</b>
<b> 63, 9, 87, 49 };</b>
<b> int avg = 0;</b>
<b> for(int i=0; i < 10; i++) </b><b>avg = avg + nums[i]; </b>
<b> avg = avg /10;</b>
<b> Console.WriteLine("Среднее: " + avg);</b>
<b> }</b>
<b>}</b>
Любопытно, что при инициализации массива можно также воспользоваться оператором new, хотя особой надобности в этом нет. Например, приведенный ниже фрагмент кода считается верным, но избыточным для инициализации массива nums в упомянутой выше программе.
<b>int[] nums = new int[] { 99, 10, 100, 18, 78, 23,</b>
<b>63, 9, 87, 49 };</b>
Несмотря на свою избыточность, форма инициализации массива с оператором new оказывается полезной в том случае, если новый массив присваивается уже существующей переменной ссылки на массив. Например:
<b>int[] nums;</b>
<b>nums = new int[] {99,10,100,18,78, 23,</b>
<b>63, 9, 87, 49 };</b>
В данном случае переменная nums объявляется в первом операторе и инициализируется во втором.
И последнее замечание: при инициализации массива его размер можно указывать явным образом, но этот размер должен совпадать с числом инициализаторов. В качестве примера ниже приведен еще один способ инициализации массива nums.
<b>int[] nums = new int[10] {99, 10, 100, 18, 78, 23,</b>
<b>63, 9, 87, 49 };</b>
В этом объявлении размер массива nums задается равным 10 явно.
Границы массива в C# строго соблюдаются. Если границы массива не достигаются или же превышаются, то возникает ошибка при выполнении. Для того чтобы убедиться в этом, попробуйте выполнить приведенную ниже программу, в которой намеренно превышаются границы массива.
<b>// Продемонстрировать превышение границ массива.</b>
<b>using System;</b>
<b>class ArrayErr {</b>
<b> static void Main() {</b>
<b> int[] sample = new int[10]; </b>
<b> int i;</b>
<b> // Воссоздать превышение границ массива. </b>
<b> for(i =0; i < 100; i = i+1) </b>
<b> sample[i] = i;</b>
<b> }</b>
<b>}</b>
Как только значение переменной i достигает 10, возникнет исключительная ситуация типа IndexOutOfRangeException, связанная с выходом за пределы индексирования массива, и программа преждевременно завершится. (Подробнее об исключительных ситуациях и их обработке речь пойдет в главе 13.)
Многомерные массивы
В программировании чаще всего применяются одномерные массивы, хотя и многомерные не так уж и редки. Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов.
Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой.
В следующей строке кода объявляется двумерный массив integer размерами 10x20.
<b>int[,] table = new int[10, 20];</b>
Обратите особое внимание на объявление этого массива. Как видите, оба его размера разделяются запятой. В первой части этого объявления синтаксическое обозначение [,] означает, что создается переменная ссылки на двумерный массив. Если же память распределяется для массива с помощью оператора new, то используется следующее синтаксическое обозначение.
<b>int[10, 20]</b>
В данном объявлении создается массив размерами 10x20, но и в этом случае его размеры разделяются запятой.
Для доступа к элементу двумерного массива следует указать оба индекса, разделив их запятой. Например, в следующей строке кода элементу массива table с координатами местоположения (3,5) присваивается значение 10.
<b>table[3, 5] = 10;</b>
Ниже приведен более наглядный пример в виде небольшой программы, в которой двумерный массив сначала заполняется числами от 1 до 12, а затем выводится его содержимое.
<b>// Продемонстрировать двумерный массив.</b>
<b>using System;</b>
<b>class TwoD {</b>
<b> static void Main() { </b>
<b> int t, i;</b>
<b> int[,] table = new int[3, 4];</b>
<b> for(t=0; t < 3; ++t) {</b>
<b> for(i=0; i < 4; ++i) { </b>
<b> table[t,i] = (t*4)+i+1;</b>
<b> Console.Write(table[t, i] + " ");</b>
<b> }</b>