Как ввести массив с клавиатуры java
Перейти к содержимому

Как ввести массив с клавиатуры java

  • автор:

Массивы в Java

В Java, чтобы объявить массив, надо в определении переменной написать квадратные скобки. Их можно разместить как перед именем переменной, так и после него. Однако первый способ предпочтительней, так как является java-стилем, второй способ – си-стиль. С правой части от знака присваивания создается объект соответствующего типа, при этом вместо круглых скобок пишутся квадратные, в которых указывается количество элементов массива. Примеры объявления переменных и создания массива вещественных чисел и строк:

double[] a = new double[10]; String[] b = new String[5];

Обращение к элементам массива происходит по их индексам, заключенным в квадратные скобки.

public class ArrayClass  public static void main(String[] args)  int[] a = new int[3]; a[0] = 15; a[1] = 12; a[2] = -3; for (int i = 0; i  a.length; i++)  System.out.println(a[i]); > for (int i : a)  System.out.println(i); > int[][] b = new int[2][2]; b[0][0] = -1; b[0][1] = 1; b[1][0] = 1; b[1][1] = -1; for (int[] ints : b)  for (int i : ints)  System.out.println(i); > > > >

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

String[] s = "ab", "cd", "ef">;

В Java размер обычного массива изменять нельзя.

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

import java.util.Arrays; import java.util.Random; public class ArraysTest { public static void main(String[] args) { Random random = new Random(); int[] a = new int[10]; for (int i = 0; i  10; i++) { a[i] = random.nextInt(100); } System.out.println(Arrays.toString(a)); Arrays.sort(a); System.out.println(Arrays.toString( Arrays.copyOf(a, 5))); } }

[ 22 , 19 , 58 , 36 , 45 , 70 , 10 , 36 , 91 , 30 ]

[ 10 , 19 , 22 , 30 , 36 ]

Метод sort() сортирует переданный в качестве аргумента массив. Метод copyOf() копирует указанное количество элементов массива. При этом создается новый массив.

Можно создавать массивы объектов собственного класса:

public class ArrayOfObjects  public static void main(String[] args)  Book[] shelf = new Book[3]; shelf[0] = new Book("Red"); shelf[1] = new Book("Green"); shelf[2] = new Book("Blue"); System.out.println(shelf[1].title); > > class Book  String title; Book(String title)  this.title = title; > >

X Скрыть Наверх

Программирование на Java. Курс

Программируем вместе

Массив — это конечная последовательность упорядоченных элементов одного типа, доступ к каждому элементу в которой осуществляется по его индексу.
Размер или длина массива — это общее количество элементов в массиве. Размер массива задаётся при создании массива и не может быть изменён в дальнейшем, т. е. нельзя убрать элементы из массива или добавить их туда, но можно в существующие элементы присвоить новые значения.
Индекс начального элемента — 0, следующего за ним — 1 и т. д. Индекс последнего элемента в массиве — на единицу меньше, чем размер массива.
В Java массивы являются объектами. Это значит, что имя, которое даётся каждому массиву, лишь указывает на адрес какого-то фрагмента данных в памяти. Кроме адреса в этой переменной ничего не хранится. Индекс массива, фактически, указывает на то, насколько надо отступить от начального элемента массива в памяти, чтоб добраться до нужного элемента.
Чтобы создать массив надо объявить для него подходящее имя, а затем с этим именем связать нужный фрагмент памяти, где и будут друг за другом храниться значения элементов массива.
Возможные следующие варианты объявления массива:

тип[] имя; тип имя[];

Где тип — это тип элементов массива, а имя — уникальный (незанятый другими переменными или объектами в этой части программы) идентификатор, начинающийся с буквы.
Примеры:

int[] a; double[] ar1; double ar2[];

В примере мы объявили имена для трёх массивов. С первом именем a сможет быть далее связан массив из элементов типа int, а с именами ar1 и ar2 далее смогут быть связаны массивы из вещественных чисел (типа double). Пока мы не создали массивы, а только подготовили имена для них.
Теперь создать (или как ещё говорят инициализировать) массивы можно следующим образом:

a = new int[10]; // массив из 10 элементов типа int int n = 5; ar1 = new double[n]; // Массив из 5 элементов double ar2 = 3.14, 2.71, 0, -2.5, 99.123>; // Массив из 6 элементов типа double

То есть при создании массива мы можем указать его размер, либо сразу перечислить через запятую все желаемые элементы в фигурных скобках (при этом размер будет вычислен автоматически на основе той последовательности элементов, которая будет указана). Обратите внимание, что в данном случае после закрывающей фигурной скобки ставится точка с запятой, чего не бывает когда это скобка закрывает какой-то блок.
Если массив был создан с помощью оператора new, то каждый его элемент получает значение по умолчанию. Каким оно будет определяется на основании типа данных (0 для int, 0.0 для double и т. д.).
Объявить имя для массива и создать сам массив можно было на одной строке по следующей схеме:

тип[] имя = new тип[размер]; тип[] имя = 0, эл1, …, элN>;
int[] mas1 = 10,20,30>; int[] mas2 = new int[3];

Чтобы обратиться к какому-то из элементов массива для того, чтобы прочитать или изменить его значение, нужно указать имя массива и за ним индекс элемента в квадратных скобках. Элемент массива с конкретным индексом ведёт себя также, как переменная. Например, чтобы вывести последний элемент массива mas1 мы должны написать в программе:

System.out.println("Последний элемент массива " + mas1[2]);

А вот так мы можем положить в массив mas2 тот же набор значений, что хранится в mas1:

mas2[0] = 10; mas2[1] = 20; mas2[2] = 30;

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

for(int i=0; i2; i++)  mas2[i] = (i+1) * 10; >

Понятно, что если бы массив у нас был не из 3, а из 100 элементов, до без цикла мы бы просто не справились.
Длину любого созданного массива не обязательно запоминать, потому что имеется свойство, которое его хранит. Обратиться к этому свойству можно дописав .length к имени массива. Например:

int razmer = mas1.length;

Это свойство нельзя изменять (т. е. ему нельзя ничего присваивать), можно только читать. Используя это свойство можно писать программный код для обработки массива даже не зная его конкретного размера.
Например, так можно вывести на экран элементы любого массива с именем ar2:

for(int i = 0; i  ar2.length - 1; i++)  System.out.print(ar2[i] + " "); >

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

for(int i = 0; i  ar1.length; i++) ar1[i] = Math.floor(Math.random() * 10); System.out.print(ar1[i] + " "); >

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

for(int i = 0; i  ar1.length; i++)  ar1[i] = Math.floor(Math.random() * 9); > for(int i = 0; i  ar1.length; i++)  System.out.print(ar1[i] + " "); >

В данном случае более рационален первый способ (один проход по массиву вместо двух), но не всегда возможно выполнить требуемые действия в одном цикле.
Для обработки массивов всегда используются циклы типа «n раз» (for) потому, что нам заранее известно сколько раз должен повториться цикл (столько же раз, сколько элементов в массиве).

Задачи

  1. Создайте массив из всех чётных чисел от 2 до 20 и выведите элементы массива на экран сначала в строку, отделяя один элемент от другого пробелом, а затем в столбик (отделяя один элемент от другого началом новой строки). Перед созданием массива подумайте, какого он будет размера.
    2 4 6 … 18 20
    2
    4
    6

    20
  2. Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).
  3. Создайте массив из 15 случайных целых чисел из отрезка [0;9]. Выведите массив на экран. Подсчитайте сколько в массиве чётных элементов и выведете это количество на экран на отдельной строке.
  4. Создайте массив из 8 случайных целых чисел из отрезка [1;10]. Выведите массив на экран в строку. Замените каждый элемент с нечётным индексом на ноль. Снова выведете массив на экран на отдельной строке.
  5. Создайте 2 массива из 5 случайных целых чисел из отрезка [0;5] каждый, выведите массивы на экран в двух отдельных строках. Посчитайте среднее арифметическое элементов каждого массива и сообщите, для какого из массивов это значение оказалось больше (либо сообщите, что их средние арифметические равны).
  6. Создайте массив из 4 случайных целых чисел из отрезка [10;99], выведите его на экран в строку. Определить и вывести на экран сообщение о том, является ли массив строго возрастающей последовательностью.
  7. Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
  8. Создайте массив из 12 случайных целых чисел из отрезка [-15;15]. Определите какой элемент является в этом массиве максимальным и сообщите индекс его последнего вхождения в массив.
  9. Создайте два массива из 10 целых случайных чисел из отрезка [1;9] и третий массив из 10 действительных чисел. Каждый элемент с i-ым индексом третьего массива должен равняться отношению элемента из первого массива с i-ым индексом к элементу из второго массива с i-ым индексом. Вывести все три массива на экран (каждый на отдельной строке), затем вывести количество целых элементов в третьем массиве.
  10. Создайте массив из 11 случайных целых чисел из отрезка [-1;1], выведите массив на экран в строку. Определите какой элемент встречается в массиве чаще всего и выведите об этом сообщение на экран. Если два каких-то элемента встречаются одинаковое количество раз, то не выводите ничего.
  11. Пользователь должен указать с клавиатуры чётное положительное число, а программа должна создать массив указанного размера из случайных целых чисел из [-5;5] и вывести его на экран в строку. После этого программа должна определить и сообщить пользователю о том, сумма модулей какой половины массива больше: левой или правой, либо сообщить, что эти суммы модулей равны. Если пользователь введёт неподходящее число, то программа должна требовать повторного ввода до тех пор, пока не будет указано корректное значение.
  12. Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен (т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.
  13. Пользователь вводит с клавиатуры натуральное число большее 3, которое сохраняется в переменную n. Если пользователь ввёл не подходящее число, то программа должна просить пользователя повторить ввод. Создать массив из n случайных целых чисел из отрезка [0;n] и вывести его на экран. Создать второй массив только из чётных элементов первого массива, если они там есть, и вывести его на экран.

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

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

Сортировка выбором

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

for (int i = 0; i  a.length; i++)  /* Предполагаем, что начальный элемент рассматриваемого * фрагмента и будет минимальным. */ int min = a[i]; // Предполагаемый минимальный элемент int imin = i; // Индекс минимального элемента /* Просматриваем оставшийся фрагмент массива и ищем там * элемент, меньший предположенного минимума. */ for (int j = i+1; j  a.length; j++)  /* Если находим новый минимум, то запоминаем его индекс. * И обновляем значение минимума. */ if (a[j]  min)  min = a[j]; imin = j; > > /* Проверяем, нашёлся ли элемент меньше, чем стоит на * текущей позиции. Если нашёлся, то меняем элементы местами. */ if (i != imin)  int temp = a[i]; a[i] = a[imin]; a[imin] = temp; > >

Сортировка методом пузырька

Суть алгоритма такова. Если пройдёмся по любому массиву установив правильный порядок в каждой паре соседних элементов, то после того прохода на последнем месте массива гарантированно будет стоять нужный элемент (самый большой для сортировки по возрастанию или самый маленький для сортировки по убыванию). Если ещё раз пройтись по массиву с такими же преобразованиями, то и на предпоследнем месте гарантированно окажется нужный элемент. И так далее.
Пример:
2 9 1 4 3 5 2 → порядок правильный, не будет перестановки
2 9 1 4 3 5 2 → 2 1 9 4 3 5 2
2 1 9 4 3 5 2 → 2 1 4 9 3 5 2
2 1 4 9 3 5 2 → 2 1 4 3 9 5 2
2 1 4 3 9 5 2 → 2 1 4 3 5 9 2
2 1 4 3 5 9 2 → 2 1 4 3 5 2 9
Код:

/* Внешний цикл постоянно сужает фрагмент массива, * который будет рассматриваться, ведь после каждого прохода * внутреннего цикла на последнем месте фрагмента будет * оказываться нужный элемент (его не надо рассматривать снова). */ for (int i = a.length - 1; i >= 2; i--)  /* В переменной sorted мы будем хранить признак того, * отсортирован ли массив. Перед каждым проходом внутреннего * цкла будем предполагать, что отсортирован, но если совершим * хоть одну перестановку, то значит ещё не конца отсортирован. * Этот приём, упрощающий сортировку, называется критерием Айверсона. */ boolean sorted = true; /* Во внутреннем цикле мы проходимся по фрагменту массива, который * определяется внешним циклом. В этом фрагменте мы устанавливаем * правильный порядок между соседними элементами, так попарно * обрабатывая весь фрагмент. */ for (int j = 0; j  i; j++)  /* Если порядок соседних элементов не правильный, то их * надо обменять местами. И запомнить, что была перестановка. */ if (a[j] > a[j+1])  int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; sorted = false; > > /* Если массив отсортирован (т.е. не было ни одной перестановки * во внутреннем цикле, значит можно прекращать работу внешнего * цикла. */ if(sorted)  break; > >

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

Массив может состоять не только из элементов какого-то встроенного типа (int, double и пр.), но и, в том числе, из объектов какого-то существующего класса и даже из других массивов.
Массив который в качестве своих элементов содержит другие массивы называется многомерным массивом.
Чаще всего используются двумерные массивы. Такие массивы можно легко представить в виде матрицы. Каждая строка которой является обычным одномерным массивом, а объединение всех строк — двумерным массивом в каждом элементе которого хранится ссылка на какую-то строку матрицы.
Трёхмерный массив можно представить себе как набор матриц, каждую из которых мы записали на библиотечной карточке. Тогда чтобы добраться до конкретного числа сначала нужно указать номер карточки (первый индекс трёхмерного массива), потому указать номер строки (второй индекс массива) и только затем номер элемент в строке (третий индекс).
Соответственно, для того, чтобы обратиться к элементу n-мерного массива нужно указать n индексов.
Объявляются массивы так:

int[] d1; //Обычный, одномерный int[][] d2; //Двумерный double[][] d3; //Трёхмерный int[][][][][] d5; //Пятимерный

При создании массива можно указать явно размер каждого его уровня:

d2 = int[3][4]; // Матрица из 3 строк и 4 столбцов

Но можно указать только размер первого уровня:

int[][] dd2 = int[5][]; /* Матрица из 5 строк. Сколько элементов будет в каждой строке пока не известно. */

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

for(int i=0; i5; i++)  dd2[i] = new int[i+2]; >

В результате получим такой вот массив:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Мы могли создать массив явно указав его элементы. Например так:

int[][] ddd2 = 1,2>, 1,2,3,4,5>, 1,2,3>>;

При этом можно обратиться к элементу с индексом 4 во второй строке ddd2[1][4], но если мы обратимся к элементу ddd2[0][4] или ddd2[2][4] — произойдёт ошибка, поскольку таких элементов просто нет. Притом ошибка это будет происходить уже во время исполнения программы (т. е. компилятор её не увидит).
Обычно всё же используются двумерные массивы с равным количеством элементов в каждой строке.
Для обработки двумерных массивов используются два вложенных друг в друга цикла с разными счётчиками.
Пример (заполняем двумерный массив случайными числами от 0 до 9 и выводим его на жкран в виде матрицы):

int[][] da = new int[6][4]; for(int i=0; ida.length; i++)  for(int j=0; jda[i].length; j++)  da[i][j] = (int)(Math.random()*10); > > for(int i=0; ida.length; i++)  for(int j=0; jda[i].length; j++)  System.out.print(da[i][j] + "\t"); > System.out.println(); // Переходим на следующую строку >

Массив

В любом языке программирования используются массивы, удобные для работы с большим количеством однотипных данных. Если вам нужно обработать сотни переменных, то вызывать каждую по отдельности становится муторным занятием. В таких случаях проще применить массив. Для наглядности представьте себе собранные в один ряд пустые коробки. В каждую коробочку можно положить что-то одного типа, например, котов. Теперь, даже не зная их по именам, вы можете выполнить команду Накормить кота из 3 коробки. Сравните с командой Накормить Рыжика. Чувствуете разницу? Вам не обязательно знать котов по именам, но вы всё равно сможете справиться с заданием. Завтра в этих коробках могут оказаться другие коты, но это не составит для вас проблемы, главное знать номер коробки, который называется индексом.

Массив

Еще раз повторим теорию. Массивом называется именованное множество переменных одного типа. Каждая переменная в данном массиве называется элементом массива. Чтобы сослаться на определённый элемент в массиве нужно знать имя массива в соединении с целым значением, называемым индексом. Индекс указывает на позицию конкретного элемента относительно начала массива. Обратите внимание, что первый элемент будет иметь индекс 0, второй имеет индекс 1, третий — индекс 2 и так далее. Данное решение было навязано математиками, которым было удобно начинать отсчёт массивов с нуля.

Объявление массива

Переменную массива можно объявить с помощью квадратных скобок:

 int[] cats; // мы объявили переменную массива 

Возможна и альтернативная запись:

 int cats[]; // другой вариант 

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

Мы пока только объявили массив, но на самом деле его ещё не существует, так как не заполнен данными. Фактически значение массива равно null.

Определение массива

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

 cats = new int[10]; 

Можно одновременно объявить переменную и определить массив (в основном так и делают):

 int[] cats = new int[10]; 

Если массив создаётся таким образом, то всем элементам массива автоматически присваиваются значения по умолчанию. Например, для числовых значений начальное значение будет 0. Для массива типа boolean начальное значение будет равно false, для массива типа char — ‘\u0000’, для массива типа класса (объекты) — null.

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

 String[] catNames = new String[10]; 

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

 for (int i = 0; i < 10; i++) catNames[i] = ""; 

Доступ к элементам массива

Обращение к элементу массива происходит по имени массива, за которым следует значение индекса элемента, заключённого в квадратные скобки. Например, на первый элемент нашего массива cats можно ссылаться как на cats[0], на пятый элемент как cats[4].

В качестве индекса можно использовать числа или выражения, которые создают положительное значение типа int. Поэтому при вычислении выражения с типом long, следует преобразовать результат в int, иначе получите ошибку. С типами short и byte проблем не будет, так как они полностью укладываются в диапазон int.

Инициализация массива

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

 int[] cats = ; // массив из 6 элементов 

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

 int[] cats = new int[6]; // массив из шести элементов с начальным значением 0 для каждого элемента cats[3] = 5; // четвертому элементу присвоено значение 5 cats[5] = 7; // шестому элементу присвоено значение 7 

Массивы часто используют в циклах. Допустим, 5 котов отчитались перед вами о количестве пойманных мышек. Как узнать среднее арифметическое значение:

 int[] mice = ; int result = 0; for(int i = 0; i < 5; i++)< result = result + mice[i]; >result = result / 5; mInfoTextView.append("Среднее арифметическое: " + result); 

Массив содержит специальное поле length, которое можно прочитать (но не изменить). Оно позволяет получить количество элементов в массиве. Данное свойство удобно тем, что вы не ошибётесь с размером массива. Последний элемент массива всегда mice[mice.length - 1]. Предыдущий пример можно переписать так:

 int[] mice = < 4, 8, 10, 12, 16 >; int result = 0; for (int i = 0; i < mice.length; i++) < result = result + mice[i]; >result = result / mice.length; // общий результат делим на число элементов в массиве mInfoTextView.append("Среднее арифметическое: " + result); 

Теперь длина массива вычисляется автоматически, и если вы создадите новый массив из шести котов, то в цикле ничего менять не придётся.

Если вам нужно изменять длину, то вместо массива следует использовать списочный массив ArrayList. Сами массивы неизменяемы.

Будьте осторожны с копированием массивов. Массив - это не числа, а специальный объект, который по особому хранится в памяти. Чтобы не загромождать вас умными словами, лучше покажу на примере.

Допустим, у нас есть одна переменная, затем мы создали вторую переменную и присвоили ей значение первой переменной. А затем проверим их.

 int a = 5; int b = a; mInfoTextView.setText("a = " + a + "\nb bg-light"> a = 5 b = 5 

Попробуем сделать подобное с массивом.

 int[] anyNumbers = ; int[] luckyNumbers = anyNumbers; luckyNumbers[2] = 25; mInfoTextView.setText("anyNumbers: " + Arrays.toString(anyNumbers) + "\nluckyNumbers: " + Arrays.toString(luckyNumbers)); 
 anyNumbers: [2, 8, 25]; luckyNumbers: [2, 8, 25]; 

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

Если же вам реально нужна копия массива, то используйте метод Arrays.copyOf()

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

Практика

Хватит болтать. Давайте будем проверять все вышесказанное.

Напишем такой код:

 public void onClick(View view)

Запустите приложение и убедитесь, что четвёртому элементу массива cats[3] присвоено значение 0. Проверьте таким образом все элементы массива. Далее присвойте шестому элементу значение 7 и проверьте снова результат.

 int[] cats = new int[6]; cats[5] = 7; String result = String.valueOf(cats[5]); mInfoTextView.setText(result); 

Однако вернёмся к нашей картинке. У всех котов есть имена. Создадим массив из восьми строковых элементов и обратимся к одному из них:

 public void onClick(View v) < String[] catsNames = < "Васька", "Кузя", "Барсик", "Мурзик", "Леопольд", "Бегемот", "Рыжик", "Матроскин" >; mInfoTextView.setText(catsNames[6]); > 

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

Перебор значений массива

Массивы часто используются для перебора всех значений. Стандартный способ через цикл for

 int aNums[] = < 2, 4, 6 >; for (int i = 0; i < aNums.length; i++) < String strToPrint = "aNums[" + i + "] bg-light"> for (int num : aNums)

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

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

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

 int[][] a = < < 1, 2, 3 >, < 4, 5, 6 >> 

Также массив может создаваться ключевым словом new:

 // трехмерный массив фиксированной длины int[][][] b = new int[2][4][4]; 

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

Двумерный массив - это массив одномерных массивов. Если вам нужен двумерный массив, то используйте пару квадратных скобок:

 String[][] arr = new String[4][3]; arr[0][0] = "1"; arr[0][1] = "Васька"; arr[0][2] = "121987102"; arr[1][0] = "2"; arr[1][1] = "Рыжик"; arr[1][2] = "2819876107"; arr[2][0] = "3"; arr[2][1] = "Барсик"; arr[2][2] = "412345678"; arr[3][0] = "4"; arr[3][1] = "Мурзик"; arr[3][2] = "587654321"; 

Представляйте двумерный массив как таблицу, где первые скобки отвечают за ряды, а вторые - за колонки таблицы. Тогда пример выше представляет собой таблицу из четырёх рядов и трёх колонок.

1 Васька 121987102
2 Рыжик 2819876107
3 Барсик 412345678
4 Мурзик 587654321

Для двумерных массивов часто используются два цикла for, чтобы заполнить элементы данными слева направо и сверху вниз. Напишем такой код:

 int[][] twoD = new int[3][4]; // объявили двухмерный массив int i, j, k = 0; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) < twoD[i][j] = k; k++; >for (i = 0; i

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

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

[0, 0] [0, 1] [0, 2] [0, 3]
[1, 0] [1, 1] [1, 2] [1, 3]
[2, 0] [2, 1] [2, 2] [2, 3]

Первое число в скобках обозначают ряд (строку), а второе число - столбец. Принято считать, что в массиве new int[M][N] первый размер означает количество строк, а второй - количество столбцов.

На экране после запуска примера мы увидим следующее:

 0 1 2 3 4 5 6 7 8 9 10 11 

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

 int[][] twoD = new int[3][]; // память под первое измерение // далее резервируем память под второе измерение twoD[0] = new int[4]; twoD[1] = new int[4]; twoD[2] = new int[4]; 

В данном примере особого смысла в этом нет.

Еще одна интересная особенность при создании массива связана с запятой. Посмотрите на пример.

 int[][] a = , ,>; System.out.println(Arrays.deepToString(a)); 

Вроде в конце используется лишняя запятая, но её наличие не приведёт к ошибке (только одна запятая). Это бывает удобно, когда надо скопировать или вставить кусок массива в коде. Кстати, метод deepToString() класса Arrays очень удобен для вывода двухмерных массивов.

Чтобы совсем сбить вас с толку, приведу ещё один правильный пример.

 Integer[] Integer[] = , ,>; System.out.println(Arrays.deepToString(Integer)); 

Я уже упоминал, что квадратные скобки можно использовать двумя способами. Сначала мы поставили скобки у типа переменной, а потом у имени переменной. При этом мы использовали в качестве имени имя класса Integer. Однако, Java догадывается, что на этот раз используется не класс, а имя и разрешает такой синтаксис. Но лучше так не выпендриваться.

Размер имеет значение

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

 int[][] matrix = new int[4][5]; System.out.println(matrix.length); 

А если мы хотим узнать количество столбцов в ряду? Тогда указываете ряд, а затем вычисляете у него количество столбцов.

 // число колонок у третьего ряда System.out.println(matrix[2].length); 

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

Сложить два массива

Предположим, у вас есть два массива, и вам нужно их соединить и получить общий массив.

 private double[] concatArray(double[] a, double[] b)

Вместо типа double вы можете использовать другие типы. Вот например, пример сложения двух строковых массивов:

 // метод для склеивания двух строковых массивов private String[] concatArray(String[] a, String[] b) < if (a == null) return b; if (b == null) return a; String[] r = new String[a.length + b.length]; System.arraycopy(a, 0, r, 0, a.length); System.arraycopy(b, 0, r, a.length, b.length); return r; >String[] week1 = new String[] < "Понедельник", "Вторник", "Среда" >; String[] week2 = new String[] < "Четверг", "Котопятница", "Субкота", "Воскресенье" >; String[] week = concatArray(week1, week2); // будет возвращён массив всех семи дней недели 

Взять часть массива

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

 // start - с какой позиции нужно получить новый массив, отсчёт с 0 private double[] copyPartArray(double[] a, int start) < if (a == null) return null; if (start >a.length) return null; double[] r = new double[a.length - start]; System.arraycopy(a, start, r, 0, a.length - start); return r; > public void onClick(View v) < double[] digits = new double[] ; double[] part = copyPartArray(digits, 1); Toast.makeText(v.getContext(), part[1] + "", Toast.LENGTH_LONG).show(); > 

Здесь вы также можете использовать другие типы вместо double. Вот пример использования:

 private String[] copyPartArray(String[] a, int start) < if (a == null) return null; if (start >a.length) return null; String[] r = new String[a.length - start]; System.arraycopy(a, start, r, 0, a.length - start); return r; > public void onClick(View v) < String[] weekday = new String[] < "Понедельник", "Вторник", "Среда" >; // нам нужен массив со второго элемента String[] week = copyPartArray(weekday, 1); // вернёт Вторник и Среда // выводим второй элемент из полученного массива, т.е. Среда Toast.makeText(v.getContext(), week[1], Toast.LENGTH_LONG).show(); > 

Перемешать элементы массива

Бывает необходимость перемешать элементы массива в случайном порядке. В интернете нашёл готовый метод по алгоритму Fisher–Yates (прим.: Fisher - это рыбак, который ловит рыбу, например, кот)

 // Implementing Fisher–Yates shuffle static void shuffleArray(int[] ar) < Random rnd = new Random(); for (int i = ar.length - 1; i >0; i--) < int index = rnd.nextInt(i + 1); // Simple swap int a = ar[index]; ar[index] = ar[i]; ar[i] = a; >> // создадим массив и перемешаем его int[] mSolutionArray = < 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 >; shuffleArray(mSolutionArray); Log.i("Array", Arrays.toString(mSolutionArray)); 

Подводим итоги

Помните, что размер массива фиксируется и не может меняться на протяжении его жизненного цикла. Если вам нужно изменять, то используйте ArrayList, который способен автоматически выделять дополнительное пространство, выделяя новый блок памяти и перемещая в него ссылки из старого.

При выходе за границу массива происходит исключение RuntimeException, свидетельствующее об ошибке программиста.

Метод arraycopy() - Копирование массива

Стандартная библиотека Java содержит статический метод System.arraycopy(), который копирует массивы значительнее быстрее, чем при ручном копировании в цикле for.

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

Разработчик Avi Yehuda написал программу, которая вычисляет время на копирование с помощью цикла for и с помощью метода arraycopy() на примере с миллионом элементов. Ручное копирование у него заняло 182 мс, с помощью метода arraycopy() - 12 мс. Разница колоссальна.

 public class ArrayCopyTestActivity extends Activity < private static final int SIZE_OF_ARRAY = 1000000; private long time; @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Integer [] sourceArray = new Integer[SIZE_OF_ARRAY]; Integer [] dst = new Integer[SIZE_OF_ARRAY]; fillArray(sourceArray); startBenchmark(); naiveCopy(sourceArray,dst); stopBenchmark(); startBenchmark(); System.arraycopy(sourceArray, 0, dst, 0, sourceArray.length); stopBenchmark(); >private void naiveCopy(Integer [] src, Integer [] dst) < for (int i = 0; i < src.length; i++) < dst[i]=src[i]; >> private void fillArray(Integer [] src) < for (int i = 0; i < src.length; i++) < src[i]=i; >> private void startBenchmark() < time = System.currentTimeMillis(); >private void stopBenchmark() < time = System.currentTimeMillis() - time; Log.d("array copy test", "time text-warning" >Поиск элементов строкового массива по начальным символам 

Допустим, у нас есть строковый массив и нам нужно по первым символам найти все слова, которые входят в данный массив.

 // Сам метод public static ArrayList searchFromStart(String[] inputArray, String searchText) < ArrayListoutputArray = new ArrayList<>(); for (int i = 0; i < inputArray.length; i++) < if (searchText.compareToIgnoreCase(inputArray[i].substring(0, searchText.length())) == 0) < outputArray.add(inputArray[i]); >> return outputArray; > // Массив строк final String[] catNamesArray = new String[] < "Рыжик", "Барсик", "Мурзик", "Мурка", "Васька", "Томасина", "Бобик", "Кристина", "Пушок", "Дымка", "Кузя", "Китти", "Барбос", "Масяня", "Симба" >; // Применим метод. Ищем по буквам "мур":

List words = searchFromStart(catNamesArray, "мур"); Toast.makeText(getApplicationContext(), words.get(0).toString() + ":" + words.get(1).toString(), Toast.LENGTH_SHORT).show();

Вернёт списочный массив из двух элементов: Мурзик и Мурка.

Класс Arrays

Класс java.util.Arrays предназначен для работы с массивами. Он содержит удобные методы для работы с целыми массивами:

  • copyOf() − предназначен для копирования массива
  • copyOfRange() − копирует часть массива
  • toString() − позволяет получить все элементы в виде одной строки
  • sort() — сортирует массив методом quick sort
  • binarySearch() − ищет элемент методом бинарного поиска
  • fill() − заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умолчанию для массива)
  • equals() − проверяет на идентичность массивы
  • deepEquals() − проверяет на идентичность массивы массивов
  • asList() − возвращает массив как коллекцию

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

Сортировка (упорядочение по значениям) массива a производится методами Arrays.sort(a) и Arrays.sort(a, index1, index2). Первый метод упорядочивает в порядке возрастания весь массив, второй — часть элементов (от индекса index1 до индекса index2). Имеются и более сложные методы сортировки. Элементы массива должны быть сравниваемы (поддерживать операцию сравнения).

Простой пример
 // задаём числа в случайном порядке int[] numbers = new int[]; // сортируем Arrays.sort(numbers); // проверяем mInfoTextView.setText(Arrays.toString(numbers)); 
Сортировка массива для ArrayAdapter

Массивы часто используются в адаптерах для заполнения данными компоненты Spinner, ListView и т.п.

Предположим, у вас есть массив строк и его нужно отсортировать перед отдачей массива адаптеру ArrayAdapter. Это позволит вывести строки в упорядоченном виде, например, в ListView:

 String[] catsNames = < "Васька", "Кузя", "Барсик", "Мурзик", "Леопольд", "Бегемот", "Рыжик", "Матроскин" >; // Сортируем перед передачей адаптеру Arrays.sort(catsNames); ArrayAdapter adapter; adapter = new ArrayAdapter<>( this, android.R.layout.simple_list_item_1, catsNames); setListAdapter(adapter); 

У метода sort() есть перегруженные версии, где можно указать диапазон массива, в пределах которого следует произвести сортировку.

Копирование массивов

Метод Arrays.copyOf(оригинальный_массив, новая_длина) — возвращает массив-копию новой длины. Если новая длина меньше оригинальной, то массив усекается до этой длины, а если больше, то дополняется нулями.

 // первый массив int[] anyNumbers = ; // копия второго массива int[] luckyNumbers = Arrays.copyOf(anyNumbers, anyNumbers.length); luckyNumbers[2] = 25; mInfoTextView.setText("anyNumbers: " + Arrays.toString(anyNumbers) + "\nluckyNumbers: " + Arrays.toString(luckyNumbers)); 

Теперь первый массив останется без изменений, а со вторым массивом делайте что хотите. Смотрим на результат.

 anyNumbers: [2, 8, 11]; luckyNumbers: [2, 8, 25]; 

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

 // три элемента int[] small_array = ; // создадим массив с пятью элементами int[] big_array = Arrays.copyOf(small_array, 5); mInfoTextView.setText("big_array: " + Arrays.toString(big_array)); 
 big_array: [1, 2, 3, 0, 0] 

Метод Arrays.copyOfRange(оригинальный_массив, начальный_индекс, конечный_индекс) — также возвращает массив-копию новой длины, при этом копируется часть оригинального массива от начального индекса до конечного –1.

 // Массив из четырёх элементов String[] array_1 = < "Васька", "Мурзик", "Рыжик", "Барсик">; // Сортировка массива Arrays.sort(array_1); // Копируем первые три элемента массива во второй массив String[] array_2 = Arrays.copyOf(array_1, 3); // Копируем нужные элементы из первого массива // в диапазоне от второго элемента до последнего в третий массив String[] array_3 = Arrays.copyOfRange(array_1, 2, array_1.length); Log.i(TAG, Arrays.toString(array_1)); Log.i(TAG, Arrays.toString(array_2)); Log.i(TAG, Arrays.toString(array_3)); 

Метод Arrays.toString()

Если использовать вызов метода toString() непосредственно у массива, то получите что-то непонятное и нечитаемое.

 String[] catNames = < "Васька", "Мурзик", "Рыжик", "Барсик">; Log.i(TAG, catNames.toString()); // Вернёт [Ljava.lang.String;@4222bd88 

Метод Arrays.toString(массив) возвращает строковое представление массива со строковым представлением элементов, заключённых в квадратные скобки. В примерах выше мы уже вызывали данный метод.

Метод deepToString() удобен для вывода многомерных массивов. Этот метод мы также уже использовали выше.

Метод Arrays.fill() - наполнение массива одинаковыми данными

Метод Arrays.fill() позволяет быстро заполнить массив одинаковыми значениями. У метода есть восемнадцать перегруженных версий для разных типов и объектов.

Метод fill() просто дублирует одно заданное значение в каждом элементе массива (в случае объектов копирует одну ссылку в каждый элемент):

 int size = 4; boolean[] test1 = new boolean[size]; int[] test2 = new int[size]; String[] test3 = new String[size]; Arrays.fill(test1, true); // присваивем всем true Toast.makeText(getApplicationContext(), Arrays.toString(test1), Toast.LENGTH_LONG).show(); Arrays.fill(test2, 9); // присваиваем всем 9 Toast.makeText(getApplicationContext(), Arrays.toString(test2), Toast.LENGTH_LONG).show(); Arrays.fill(test3, "Мяу!"); // Ну вы поняли Toast.makeText(getApplicationContext(), Arrays.toString(test3), Toast.LENGTH_LONG).show(); 

Запустив код, вы увидите, что на экране по очереди выводятся значения:

[true, true, true, true] [9, 9, 9, 9] [Мяу!, Мяу!, Мяу!, Мяу!]

Можно заполнить данными в нужном интервале за два прохода:

 int size = 4; String[] test3 = new String[size]; Arrays.fill(test3, "Мяу! "); Arrays.fill(test3, 2, 3, "Гав!"); Toast.makeText(getApplicationContext(), Arrays.toString(test3), Toast.LENGTH_LONG).show(); 

Сначала массив заполнится мяуканьем кота 4 раза, а потом на третью позицию попадает слово Гав!:

[Мяу!, Мяу!, Гав!, Мяу!]

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

Метод equals() - сравнение массивов

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

Напишем код в своей учебной программе.

 // Создаем два массива int[] a1 = new int[10]; int[] a2 = new int[10]; // заполняем их девятками Arrays.fill(a1, 9); Arrays.fill(a2, 9); mInfoTextView.setText("Сравним: " + Arrays.equals(a1, a2)); 

Мы создали два массива и заполнили их одинаковыми числами. При сравнении мы получим true. Добавим в код строчку кода, которая заменит один элемент во втором массиве:

 //Изменим один элемент у второго массива a2[3] = 11; mInfoTextView.setText("Сравним: " + Arrays.equals(a1, a2)); 

Теперь при сравнении будет выдаваться false.

Задачи

Решите задачи. Ответы доступны зарегистрированным пользователям.

Имеется массив из четырёх чисел int[] numbers = ;. Поменяйте местами первый и второй элемент массива. (Ответ)

Создайте массив из всех чётных чисел от 2 до 30 и выведите элементы массива на экран.

Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).

Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.

Найти максимальное значение из массива

Задача: Имеется статистика, сколько мышей поймал кот Барсик за год по месяцам в виде массива:

 int[] mice = new int[] < 4, 9, 3, 22, 5, 18, 25, 7, 11, 15, 5, 19 >; 

Написать метод getMax(), который вычисляет максимальное значение из массива. Ну и метод getMin() для нахождения минимального значения.

Найти три наибольших числа из массива

Похожая задача - найти три наибольших числа из массива mice (предыдущая задача).

Перестановка элементов массива в обратном порядке

Задача: Имеется массив, нужно переставить элементы массива в обратном порядке.

 int[] mice = new int[] < 4, 9, 3, 22, 5, 18, 25, 7, 11, 15, 5, 19 >; 

Поместить нули в конец массива

Дан массив с числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Переместить все нули в конец массива.

Поместить нули в начало массива

Дан массив с числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Переместить все нули в начало массива.

Найти индекс числа из массива

Есть массив, нужно определить индекс числа, который входит в этот массив.

Массивы в Java

В статье "Переменные в Java.Создание переменной" мы говорили о том, что переменная - это некоторый контейнер , в котором может храниться значение для дальнейшего использования в программе.

array-concept_vertex-academy
  • обычная переменная может содержать только 1 значение .
  • массив - это простая переменная, которая может содержать неодно, а сразу несколько значений, в отличие от обычной переменной, содержащей единственное значение. Массив - это такой себе "магический" контейнер, в который мы можем положить сразу несколько значений ("коробочек").

Ниже приводим Вам примеры массивов.

Пример №1

massiv_vertex-academy

Как видите, мы создали целочисленный массив, который назвали array1 и присвоили три числа: 5, 17, 350

Пример №2

massiv_string_vertex-academy

Как видите, мы создали строковый массив, который назвали array2 и присвоили слово "Java " и фразу "is the best". Причем мы их написали в двойных кавычках, потому что это массив типа String.

Любой массив имеет длину

Например, длина этого массива = 3. Потому что в массиве 3 числа: 5, 17, 350

massiv_vertex-academy

А длина этого массива = 2. Потому что в массиве 2 значения: "Java " и "is the best"

massiv_string_vertex-academy

Если сказать проще, то длина массива - это количество элементов, которые в нем хранятся (количество маленьких "коробочек" в большой).

Предлагаем теперь Вам ответить какая длина у этих 3 массивов?

massivy_test_vertex-academy

Правильные ответы:

massiv3_vertex-academy

Длина этого массива 6. Потому что в этом массиве 6 чисел: 1, 8, 15, 30, 2, 3

massiv4_vertex-academy

Длина этого массива 2. Потому что в массиве 2 числа: 1 и 3

massiv5_vertex-academy

Длина этого массива 4. Потому что в массиве 4 слова: "Киев", "Львов", "Луцк", "Одесса".

А как сделать так, чтоб автоматически получать длину массива?

Подсчитывать вручную количество элементов в массиве - это хорошо, но что, если элементов очень много. Вряд ли у Вас хватит терпения подсчитать 3 000 элементов. Если использовать свойство массива length , длина массива будет подсчитана автоматически.

Например, у нас есть вот такой массив.

massiv_vertex-academy

Пишем int k = array1.length; .

В результате создастся переменная k, в которой будет лежать значение 3.

Попробуйте запустить вот этот код, чтоб убедиться в этом на практике:

class Test < public static void main ( String [ ] args ) < int [ ] array1 = < 5 , 17 , 350 >;
int k = array1 . length ;
System . out . println ( k ) ;

В любом массиве значения элементов сохраняются под порядковыми номерами (индексами)

Причем нумерация начинается с "нуля" . Предлагаем рассмотреть на примерах.

Пример №1

В данном массиве:

5 - это элемент с порядковым номером 0

17 - это элемент с порядковым номером 1

350 - это элемент с порядковым номером 2

massivy_indeksy_vertex-academy

Пример №2

В данном массиве:

"Java " - это элемент с порядковым номером 0

"is the best" - это элемент с порядковым номером 1

massivy_2_indeksy_vertex-academy

Если Вы очень любите сладости, то можете представить массив в виде макаронов.

То есть индекс элемента - это его номер по порядку "минус" 1.

Как видно, длина массива из макаронов =3. И применяется та же логика к порядковым номерам (индексам) в массиве.

Давайте разберемся зачем в массиве значения элементов сохраняются под порядковыми номерами (индексами)?

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

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

Давайте рассмотрим это на практике.

  1. Как мы можем обратиться к элементу массива array1 под индексом 0? Ответ: array1[0]
  2. Как мы можем обратиться к элементу массива array1 под индексом 1? Ответ: array1[1]
  3. Как мы можем обратиться к элементу массива array1 под индексом 2? Ответ: array1[2]

massivy_indeksy_vertex-academy

А как создать пустой массив?

array1_vertex-academy

Во всех предыдущих примерах мы создавали массив и сразу инициализировали его какими-то значениями. Однако есть возможность сначала создать массив нужного размера, а позже наполнять его значениями (если нам при создании не известно, какие значения там будут находиться). Например, врач говорит женщине, что у нее будет двойня, но какого пола будут дети пока не известно. Вот Вам массив на 2 элемента типа "ребенок", но значения пока не известны.

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

тип [] название = new тип[размер];

Запомните, что тип до "равно" и после, если мы говорим о массиве из примитивных типов, должны быть одинаковыми!

В будущем мы увидим, что это правило может нарушаться, но это уже другая история.

В программе это выглядело бы вот так:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *