Добавить в цитаты Настройки чтения

Страница 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 &lt; 10; i++) </b><b>avg = avg + nums[i]; </b>

<b>    avg = avg /10;</b>

<b>    Console.WriteLine(&quot;Среднее: &quot; + 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 &lt; 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 &lt; 3; ++t) {</b>

<b>      for(i=0; i &lt; 4; ++i) { </b>

<b>        table[t,i] = (t*4)+i+1;</b>

<b>        Console.Write(table[t, i] + &quot; &quot;);</b>

<b>      }</b>