PrintArr(count); // печать массива счетчиков

}

public static void printArr (int[] c)

/**

Состояние входа: метод получает массив

Состояние выхода: метод выводит массив на экран, индекс и значение каждой ячейки в отдельной строке

*/

{

for (int i=0; i<c.length; i++)

System.out.println(i+"="+c[i]);

}

public static void fillArr (int[] c, int c)

/**

Состояние входа: метод получает массив, содержащий во всех ячейках значение 0

Состояние выхода: метод заполняет массив количеством появлений значения, равного индексу каждой ячейки, в серии из n случайных чисел из диапазона [0;9]

*/

{

int x;

for (int i=1; i<=n; i++)

{

x=(int)(10*Math.random());

c[x]++;

}

}

public static void zeroArr (int[] c)

/**

Состояние входа: метод получает массив

Состояние выхода: метод заполняет массив нулями

*/

{

for (int i=0; i<c.length; i++)

c[i]=0;

}

}

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

Для этого просто следует решить, какое значение будет считать та или иная ячейка массива счетчиков.

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

В этом случае можно создать массив счетчиков размером 7 (по числу категорий) и решить, что ячейка с индексом 0 будет счетчиков дошкольников, ячейка с индексом 1 – школьников, ячейка с индексом 2 – студентов, и так далее.

Раздел №24 (часть 2).
Массивы сумматоров

Аналогично массивам счетчиков, широко применяются и массивы сумматоров.

Использование переменных-сумматоров связано, как правило, с необходимостью подсчитывать общее количество каких-то значений:

· Суммы всех четных и суммы всех нечетных чисел в серии значений

· Общего количества мальчиков и общего количества девочек в школе – при введении соответствующих данных по каждому классу

· Общего числа проданных билетов на всех аттракционах парка – при введении данных по каждому аттракциону

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

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


Раздел № 25.
Массив массивов

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

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

Приведем несколько примеров, в которых становится необходимым использовать более одного массива.

Скажем, нам надо хранить информацию о недельном расписании уроков какого-то класса или ученика. В этом случае нам потребуется использовать 5 или 6 массивов – по одному на каждый день занятий. Это могут быть массива типа "строковое значение" (если мы решим хранить в них названия предметов), а могут быть и массивы с целочисленными значениями (если мы пронумеруем все школьные предметы).

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

Можно привести еще множество аналогичных задач, при решении которых потребуется использовать несколько (точнее – много…) однотипных массивов. Это и задачи, связанные с расписанием, и задачи, связанные с отчетами (о рабочем времени на предприятии, в конторе, в учебном заведении – по каждому "участнику", отделу, классу, цеху…), с финансовой информацией (движение денег на счетах клиентов)… и прочая, и прочая, и прочая…

В свое время, когда мы оказались перед проблемой "слишком много переменных" – ее решение оказалось в использовании массива: "одно имя, много значений в пронумерованных ячейках".

Теперь, когда мы оказались перед проблемой "слишком много массивов", ее решение мы найдем в использовании аналогичного подхода: создании массива массивов.

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

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

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

Следует сказать, что термины "одномерный массив" и "двумерный массив" довольно часто используются и в применении к языку Java – но, строго говоря, это очень и очень спорно с точки зрения смысла.

Дело в том, что в таких языках, как, например, BASIC или Pascal, размер массива надо было обязательно указывать с самого начала в конкретных числовых значениях – и не было совершенно никакой(!), просто категорически никакой возможности устанавливать размер массива гибко, то есть в процессе работы программы, а не в процессе написания программы.

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

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

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

Мы в дальнейшем будем стараться использовать именно термин "массив массивов" – но следует иметь в виду, что (очевидно, в силу привычки) довольно часто используется выражение "двумерный массив".


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: