Теоретические основы. Базовый способ хранения информации в компьютерной программе – это хранение в переменной

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

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

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

Массивы могут иметь одно или несколько измерений. Одномерный массив можно представить как последовательность однотипных объектов (вектор), а двумерный – как таблицу (матрицу) размера M*N, где M - число строк, N - столбцов.

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

<тип>[] <имя массива>;

К примеру:

int [] digits;

char [] letters;

Здесь массивы объявляются, но в них ничего не хранится, и даже не выделена память для хранения элементов массива, то есть массив объявлен, но не инициализирован. Для выделения памяти необходимо использовать ключевое слово new, либо можно непосредственно указать элементы массива в фигурных скобках {}.

При использовании ключевого слова new необходимо еще раз указать тип данных элементов массива и указать их количество. Формат:

<имя массива> = new <тип>[<количество элементов>];

letters = new char [33];

Объявление и инициализацию массива можно объединить:

<тип>[] <имя массива> = new <тип>[<количество элементов>];

char [] letters = new char [33];

В этом примере создается массив символов (типа char) с названием letters. В массиве создано 33 элементов, в которых можно хранить буквы алфавита. Каждому элементу массива задано начальное значение. В данном случае, начальное значение будет ‘\0’. Массивы с любыми числовыми типами будут иметь начальное значение 0, а типа boolean – false.

Для не слишком больших массивов начальные данные можно задать с помощью скобок {}, но тогда делать это нужно при объявлении:

<тип>[] <имя массива> = {<элемент1>, <элемент2>, … <элементN>};

К примеру:

int [] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

В этом случае количество элементов в массиве явно не указывается, а определяется количеством указанных элементов.

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

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

digits[3]

Элементы в массиве индексируются с нуля, поэтому индекс последнего элемента на 1 меньше количества элементов массива, указанного при объявлении.

Пример работы с элементами массива:

public static void main(String[] args) {

// создадим массив целых чисел из 5ти элементов

int [] array = new int [5];

// запишем число 10 в элемент с индексом 2

array[2] = 10;

// запишем что-нибудь в элемент с индексом 3

array[3] = array[2] * 2;

// сохраним в другую переменную значение элемента массива

int a = array[3];

// выведем в консоль

System. out. println("Значение элемента с индексом 2: " + array[2]);

System. out. println("Значение элемента с индексом 3, сохраненное в переменную а: " + a);

}

Вывод в консоль:

Значение элемента с индексом 2: 10

Значение элемента с индексом 3, сохраненное в переменную а: 20

Получить размер массива, то есть количество элементов в нем, можно с помощью свойства length:

int [] array = {2, 4, 1, 5};

int l = array.length;

System. out. println("Количество элементов массива = " + l);

Вывод в консоль:

Количество элементов массива = 4

Для прохождения по элементам массива при его заполнении или выводе в консоль удобно использовать цикл for. К примеру, заполним массив случайными значениями от 0 до 10, используя класс Random:

// в самом начале программы необходимо добавить строку для подключения

// класса Random, позволяющего генерировать случайные числа

import java.util.Random;

public class Vectors {

public static void main(String[] args) {

// создадим переменную, с помощью которой можно генерировать числа

// пока примем на веру данную строку

Random rand = new Random();

int size = 10;

int [] array = new int [size];

for (int i = 0; i < size; i++) {

// зададим значение очередному элементу массива

// использовав функцию nextInt

array[i] = rand.nextInt(10);

System. out. print(array[i] + " "); // и сразу выведем его в консоль

}

}

}

Размер массива храним в отдельной переменной, так как он используется несколько раз. Если вдруг понадобится изменить размер массива, к примеру, на 15, то изменить это нужно только в одном месте – изменив значение переменной size. Это помогает избежать ошибок.

Функция nextInt(n) класса Random возвращает целочисленные случайные значения из диапазона [0, n). Функция nextDouble() класса Random возвращает действительные значения в диапазоне [0, 1).

Для генерации целочисленных случайных чисел в диапазоне [a, b):

array[i] = rand.nextInt(b-a) + a;

Задавать случайные значения можно также с помощью функции Math.random(), возвращающей действительные значения в диапазоне [0, 1).

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

int [] array = {2, 4, 1, 5};

for (int element: array) {

System. out. println(element);

}

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

Примеры:

· Поиск максимального элемента массива

public static void main(String[] args) {

Random rand = new Random();

int size = 10;

int [] array = new int [size];

// создадимпеременную max, в которойбудемхранить

// максимальныйэлементмассива, и зададимейначальноезначение

int max = array[0];

// создадимпеременную maxIndex, в которойбудемхранить

// индексмаксимальногоэлемента

int maxIndex = 0;

// заполниммассивслучайнымичисламиот 0 до 20

for (int i = 0; i < size; i++) {

array[i] = rand.nextInt(20);

System. out. print(array[i] + " ");

}

// ищеммаксимальныйэлемент

for (int i = 0; i < size; i++) {

// еслиочереднойэлементмассивабольшечемзначение,

// сохраненное в переменной max, то в max сохраняемзначение

// новогомаксимальногоэлемента, а в maxIndex егоиндекс

if (array[i] > max) {

max = array[i];

maxIndex = i;

}

}

System. out. println("\nИндекс максимального элемента: " + maxIndex); System. out. println("Значение максимального элемента: " + max);

}

· Сортировка массивов

Сортировкой называется такой процесс перестановки элементов массива, когда все его элементы выстраиваются по возрастанию или по убыванию.

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

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

В приложении А вы можете посмотреть примеры программ сортировки методом пузырька и сортировка выбором.

Также в Java есть встроенный метод для сортировки массивов:

int [] array = new int [size];

...

// отсортирует массив по возрастанию хранить

Arrays. sort (array);

При использовании этого метода необходимо добавить строчку

import java.util.Arrays;

в самом начале файла программы.


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



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