Как перевернуть двумерный массив в java. Массивы в Java. Одномерные и многомерные

  • 28.06.2019

Последнее обновление: 09.11.2018

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

Тип_данных название_массива; // либо тип_данных название_массива;

Например, определим массив чисел:

Int nums; int nums2;

После объявления массива мы можем инициализовать его:

Int nums; nums = new int; // массив из 4 чисел

Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов] , где new - ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, nums = new int; - в этом выражении создается массив из четырех элементов int, и каждый элемент будет иметь значение по умолчанию - число 0.

Также можно сразу при объявлении массива инициализировать его:

Int nums = new int; // массив из 4 чисел int nums2 = new int; // массив из 5 чисел

При подобной инициализации все элементы массива имеют значение по умолчанию. Для числовых типов (в том числе для типа char) это число 0, для типа boolean это значение false , а для остальных объектов это значение null . Например, для типа int значением по умолчанию является число 0, поэтому выше определенный массив nums будет состоять из четырех нулей.

Однако также можно задать конкретные значения для элементов массива при его создании:

// эти два способа равноценны int nums = new int { 1, 2, 3, 5 }; int nums2 = { 1, 2, 3, 5 };

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

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

Int nums = new int; // устанавливаем значения элементов массива nums = 1; nums = 2; nums = 4; nums = 100; // получаем значение третьего элемента массива System.out.println(nums); // 4

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

И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums = 5; . Если мы так попытаемся сделать, то мы получим ошибку.

Длина массива

Важнейшее свойство, которым обладают массивы, является свойство length , возвращающее длину массива, то есть количество его элементов:

Int nums = {1, 2, 3, 4, 5}; int length = nums.length; // 5

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

Int last = nums;

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

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

Int nums1 = new int { 0, 1, 2, 3, 4, 5 }; int nums2 = { { 0, 1, 2 }, { 3, 4, 5 } };

Визуально оба массива можно представить следующим образом:

Одномерный массив nums1
Двухмерный массив nums2

Поскольку массив nums2 двухмерный, он представляет собой простую таблицу. Его также можно было создать следующим образом: int nums2 = new int; . Количество квадратных скобок указывает на размерность массива. А числа в скобках - на количество строк и столбцов. И также, используя индексы, мы можем использовать элементы массива в программе:

// установим элемент первого столбца второй строки nums2=44; System.out.println(nums2);

Объявление трехмерного массива могло бы выглядеть так:

Int nums3 = new int;

Зубчатый массив

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

Int nums = new int; nums = new int; nums = new int; nums = new int;

foreach

Специальная версия цикла for предназначена для перебора элементов в наборах элементов, например, в массивах и коллекциях. Она аналогична действию цикла foreach , который имеется в других языках программирования. Формальное ее объявление:

For (тип_данных название_переменной: контейнер){ // действия }

Например:

Int array = new int { 1, 2, 3, 4, 5 }; for (int i: array){ System.out.println(i); }

В качестве контейнера в данном случае выступает массив данных типа int . Затем объявляется переменная с типом int

То же самое можно было бы сделать и с помощью обычной версии for:

Int array = new int { 1, 2, 3, 4, 5 }; for (int i = 0; i < array.length; i++){ System.out.println(array[i]); }

В то же время эта версия цикла for более гибкая по сравнению for (int i: array) . В частности, в этой версии мы можем изменять элементы:

Int array = new int { 1, 2, 3, 4, 5 }; for (int i=0; i

Перебор многомерных массивов в цикле

int nums = new int { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < nums.length; i++){ for(int j=0; j < nums[i].length; j++){ System.out.printf("%d ", nums[i][j]); } System.out.println(); }

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

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

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

Теперь перейдем к массивам.

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

Допустим, Вам нужно создать 5 целочисленных переменных и задать им некоторое значение. Как Вы это будете делать? Не зная массивов, Вы скорее всего начнете писать вот так: int a = 2, b = 3, c = 5, d = 21, e = 2;

Имея в арсенале такой тип данных как массивы, Вы можете писать так: int a = {2, 3, 5, 21, 2};

Это очень удобно, когда имеет место обработка этих данных. Например, теперь Вам нужно к каждой переменной добавить 3. Если бы Вы использовали первый способ объявления, то такая операция заняла бы у Вас достаточно много времени. Тогда как имея в арсенале массивы и , мы можем обрабатывать огромное количество данных не прибегая к монотонному коду.

Перед тем как использовать, массив нужно:

  1. Объявить;
  2. Создать;
  3. Инициализировать.

Запомните это порядок действий и никогда не нарушайте его.
Объявление массивов:
char s;
String p;
или
char s;
String p;
Создание массивов:
s = new char;
p = new String;

В квадратных скобках указано количество элементов массива. Это количество нельзя будет поменять потом.
Инициализация массивов:
после создания – поэлементно: int a = {1,2,3,4,5};
при объявлении/создании – массив целиком: int b = new int {2, 4 ,6};.

Если массив явно не проинициализирован, то после его создания все
элементы равны:
0 – в числовых массивах
false – в boolean-массивах
null – в массивах объектов

Границы массивов:
У всех массивов есть поле length – длина массива (в элементах)
Первый элемент всегда имеет индекс 0 (не путать со значением).
Последний элемент всегда имеет индекс length-1.

После такого количества теории, думаю, нужно немного практики:

    public class ArraysInJava {

    int intArray; //объявление массива

    intArray = new int [ 10] ; //инициализация массива

    intArray[ 0] = 1 ; //первому элементу массива даем значение 1

    intArray[ 1] = 2 ; //второму значение 2

    intArray[ 6] = 7 ; //остальные значения массива, которым мы

    //не задали значений будут по умолчанию 0

    //соответствует значению в квадратных скобках при инициалазации.

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

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

    intArray[ i] = 45 ; //каждый элемент массива может быть изменен

Результат выполнения кода:

Мы рассмотрели одномерные массивы в Java. Сейчас пришла очередь двумерных.

Как Вы уже могли догадаться двумерный массив — это массив массивов. Не нужно пугаться. Все намного проще, чем кажется.

int twoDim = new int — вот так можно объявить двумерный массив с размерностью 4 на 4. Будет 4 элемента по вертикали и 4 по горизонтали. Задать значение таком массиву так же просто как и одномерному: twoDim = 3. Эта запись будет означать, что мы задали нашему элементу массива, которых находится во втором ряде (индекс начинается с 0) и 3 столбике. На рисунке это будет вот так:

Кстати, вот пример кода:

Многомерные массивы могут иметь сколько угодно размерностей. Объявление, инициализация и работа с ними идентична одномерным массивам. Если Вы научитесь работать с одномерными и двумерными массивами, то с трехмерными и выше проблем не будет.

Еще пример. Точнее задание. Я хочу, чтобы Вы подумали и написали приложение, которое выводит числа в таком порядке:

Подсказка: System.out.println(); — печатает с новой строки, тогда как: System.out.print() — печатает в той самой строке.

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

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

    public class FormatMatrixPrint {

    int size = 5 ;

1. Что такое массивы?

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

Представим, что у вас есть приют для бездомных животных, в котором пять котов. Как зовут каждого вы не помните, но у каждого есть жетончик с номерком, который позволяет идентифицировать каждое животное. Можно сказать, что это и есть массив "котики" размером пять. Обратите внимание, на то что индексация начинается с нуля - так принято в Java. Если бы не было возможности создавать массивы, нужно было бы объявлять пять переменных и придумывать им имена, что не очень удобно.

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

2. Одномерные массивы

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

Тип имяПеременной;

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

Пример 1. Пример объявления массивов

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

Int monthDays; double monthSalaries;

2.1. Инициализация массива с помощью ключевого слова new

Когда массив объявлен, память под него еще не выделена. Для выделение памяти под массив используется ключевое слово new, после которого опять указывается тип массива и в квадратных скобках - размер:

ИмяПеременной = new тип[размер];

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

Int values = new int;

Пример 2. Пример объявления массива

Рассмотрим пример объявления массива типа int размером 12 на данном примере. После выполнения строки int monthDays = new int массив из 12 элементов создан. Каждому элементу присваивается значение по умолчанию для заданного типа. Для типа int это ноль. Для обращения к отдельному элементу массива после имени массива в квадратных скобочках задаем индекс элемента. Таким образом мы можем обратиться к элементу массива для изменения или получения его значения.

Public class Array1 { public static void main(String args) { int monthDays = new int; monthDays = 31; monthDays = 28; monthDays = 31; monthDays = 30; monthDays = 31; monthDays = 30; monthDays = 31; monthDays = 31; monthDays = 30; monthDays = 31; monthDays = 30; monthDays = 31; System.out.println("B апреле " + monthDays + " дней."); } }

2.2. Инициализация массива с помощью блока для инициализации

Пример 3. Пример инициализации одномерного массива

Если заранее известны значения для каждого элемента массива, можно использовать блок для инициализации массива. Вместо new int, в фигурных скобках через запятую перечисляются значения элементов массива. Размер массива выводится компилятором из количества указанных элементов.

Public class Array2 { public static void main(String args) { int monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; System.out.println("B апреле " + monthDays + " дней."); } }

2.3. Безымянный массив

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

Int testScores = {1, 2, 3, 4}; ... testScores = {4, 7, 2}; //ошибка компиляции

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

TestScores = new int{4, 7, 2};

Второй случай использования безымянного массива - это передача массива в метод. В следующем примере метод print принимает на входа массив типа int. При вызове метода в качестве аргумента можно передать безымянный массив.

Пример 4. Пример безымянного массива

public class Array3 { public static void main(String args) { int testScores = {1, 2, 3, 4}; for (int element: testScores) { System.out.print(element + " "); } System.out.println(); testScores = new int{4, 7, 2}; for (int element: testScores) { System.out.print(element + " "); } System.out.println(); print(new int{4, 6, 2, 3}); } public static void print(int array) { for (int element: array) { System.out.print(element + " "); } } }

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

Многомерные массивы представляют собой массивы массивов.

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

Int twoD = new int;

Следующий рисунок показывает как можно визуально представить двумерный массив 4 на 5. Левый индекс определяет строку, а правый столбец.

Пример 5. Пример двухмерного массива

Следующий пример демонстрирует каким образом можно установить значения в двухмерный массив 4x5. Для перебора строк используется внешний цикл for , для перебора столбцов - внутренний. Каждому следующему элементу присваивается значение на единицу большее чем предыдущее.

Public class TwoDArray1 { public static void main(String args) { int twoD = new int; int i, j, k = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); } System.out.println(); } } }

3.2.Представление многомерного массива в памяти

Рассмотрим теперь как представлен массив int twoD = new int; в памяти.Переменная twoD указывает не на матрицу, а на строку (красного цвета) состоящую из трех элементов. Значение каждого элемента - это ссылка на строку из четырех элементов (фиолетового цвета).

Следующая картинка показывает каким образом хранится трехмерный массив int threeD = new int в памяти:

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

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

Пример 6. Пример двухмерного массива с разной размерностью

Посмотрим код, реализующий такой массив. При объявлении массива необходимо задать количество элементов только для первой размерности - int array = new int . Таким образом, мы указываем количество строк в массиве, но под каждую строку память не выделяем. Далее выделяем отдельно память под каждую строку массива. Например, строка с индексом ноль будет размера 1 - array = new int.

Public class TwoDArray2 { public static void main(String args) { int array = new int; array = new int; array = new int; array = new int; array = new int; int i, j, k = 0; for (i = 0; i < 4; i++) { for (j = 0; j < i + 1; j++) { array[i][j] = k++; System.out.print(array[i][j] + " "); } System.out.println(); } } }

3.4. Блок для инициализации многомерного массива

Пример 7. Инициализация двухмерного массива

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

Public class TwoDArray3 { public static void main(String args) { double arrayTwoD = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, {12, 13, 14, 15} }; for (double arrayOneD: arrayTwoD) { for (double element: arrayOneD) { System.out.print(element + " "); } System.out.println(); } } }

3.4. Длина массива

Пример 8. Получение длины массива

Следующий пример демонстрирует как получать длину массива. Для этого используется переменная length . С одномерным массивом все понятно - его длина это количество его элементов. Длина многомерного массива - это количество элементов его первой размерности. Например, длина массива array2 - это 2. Также можно получить длину каждой строки массива. Например, array2.length - вернет количество элементов в строке с индексом ноль.

Public class ArraySize { public static void main(String args) { int array1 = {1, 2, 3, 4}; int array2 = {{1, 1, 1}, {2, 2, 2}}; System.out.println("Размер массива array1 = " + array1.length); System.out.println("Размер массива array2 = " + array2.length); System.out.println("Размер 1-строки массива array2 = " + array2.length); } }

Результат выполнения:

Размер массива array1 = 4 Размер массива array2 = 2 Размер 1-строки массива array2 = 3

4. Полезные методы при работе с массивами

Существует ряд методов, полезных при работе с массивами. Рассмотрим их:

4.1. Метод Arrays.toString()

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

Пример 9. Применение метода Arrays.toString()

import java.util.Arrays; public class ArraysToStringDemo { public static void main(String args) { int array = {1, 4, 6, 3, 8}; System.out.println(Arrays.toString(array)); } }

4.2. Метод Arrays.deepToString()

Метод возвращает строковое представление многомерного массива, выделяя строки квадратными скобками:

Пример 10. Применение метода Arrays.deepToString()

import java.util.Arrays; public class ArraysDeepToStringDemo { public static void main(String args) { String array = {{"один-один", "один-два", "один-три"}, {"два-один", "два-два", "два-три"}}; System.out.println(Arrays.deepToString(array)); } }

4.3. Метод Arrays.sort()

Метод Arrays.sort() сортирует элементы числового массива по возрастанию:

Пример 11. Сортировка массива

import java.util.Arrays; public class ArraysSort1 { public static void main(String args) { int array = new int{3, 1, 5, 6, 8}; Arrays.sort(array); System.out.println(Arrays.toString(array)); } }

4.4. Метод Arrays.binarySearch()

Метод Arrays.binarySearch() ищет в массиве заданное значение и возвращает номер элемента. Если искомый элемент не найден, то возвращается -(position + 1) , где position - позиция элемента где он МОГ БЫ БЫТЬ. Массив должен быть отсортирован, иначе результат вызова метода будет неопределен:

Пример 12. Поиск элемента массива

import java.util.Arrays; public class BinarySearch1 { public static void main(String args) { int array1 = {10, 20, 30, 40}; int pos1 = Arrays.binarySearch(array1, 20); int pos2 = Arrays.binarySearch(array1, 25); System.out.println(pos1); System.out.println(pos2); } }

Результат выполнения:

4.5. Метод System.arraycopy()

Метод System.arraycopy() позволяет копировать часть массива в другой массив.

Пример 13. Копирование массива

Рассмотрим пример, копирующий элементы 2,3,4 из массива arraySource в массив arrayDestination:

Import java.util.Arrays; public class ArrayCopy1 { public static void main(String args) { int arraySource = {1, 2, 3, 4, 5, 6}; int arrayDestination = {0, 0, 0, 0, 0, 0, 0, 0}; System.out.println("arraySource: " + Arrays.toString(arraySource)); System.out.println("arrayDestination: " + Arrays.toString(arrayDestination)); System.arraycopy(arraySource, 1, arrayDestination, 2, 3); System.out.println("arrayDestination after arrayCopy: " + Arrays.toString(arrayDestination)); } }

Результат выполнения:

ArraySource: arrayDestination: arrayDestination after arrayCopy:

Пример 14. Копирование массива из себя в себя

Можно копировать в тот же массив с перекрытием областей:

Import java.util.Arrays; public class ArrayCopy2 { public static void main(String args) { int array = {1, 2, 3, 4, 5, 6, 7, 8}; System.out.println(Arrays.toString(array)); System.arraycopy(array, 1, array, 3, 3); System.out.println(Arrays.toString(array)); } }

Результат выполнения:

Массивы (arrays) _ это упорядоченные наборы элементов одного типа. Элементами массива могут служить объекты простых и ссылочных типов, в том Числе и ссылки на другие массивы. Массивы сами по себе являются объектами и

наследуют класс Object. Объявление

int ia = new int;

Определяет массив с именем ia, который изначально указывает на набор из трех Элементов типа int.

В объявлении массива его размерность не указывается. Количество элементов массива задается при его создании посредством оператора new. Длина массива фиксируется в момент создания и в дальнейшем изменению не поддается. Впрочем, переменной типа массива (в нашем примере – ia) в любой момент может быть поставлен в соответствие новый массив с другой размерностью.

Доступ к элементам массива осуществляется по значениям их номеров-индексов.

Первый элемент массива имеет индекс, равный нулю (0), а последний – length – 1. Обращение к элементу массива выполняется посредством задания имени массива и значения индекса, заключенного в квадратные скобки, [ и ]. в предыдущем примере первым элементом массива ia будет ia, а последним – ia. При каждом обращении к элементу массива по индексу исполняющая система Java проверяет, находится ли значение индекса в допустимых пределах, и генерирует исключение типа ArraylndexOutOfBoundsException, если результат проверки ложен. 6 Выражение индекса должно относиться к типу int – только этим и ограничивается максимальное количество элементов массива.

Длину массива легко определить с помощью поля length объекта массива (которое неявно снабжено признаками publiс и final). Ниже приведен дополненный код прежнего примера, в котором предусмотрено выполнение Цикла, обеспечивающего вывод на экран содержимого каждого элемента массива ia:

for (int i = о; i < ia.length; i++)

system.out.println(i + ": " + ia[i]);

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

Допускается и иная форма объявления массива, в которой квадратные скобки задаются после идентификатора массива, а не после наименования его типа:

int ia = new int;

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

Модификаторы в объявлениях массивов

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

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

В Java поддерживается возможность объявления многомерных массивов (multidimensional arrays) (т.е. массивов, элементами которых служат другие массивы), Код, предусматривающий объявление двумерной матрицы и вывод на экран содержимого ее элементов, может выглядеть, например, так:

float mat = new float;

setupMatrix(mat);

for (int у = о; у < mat.length; у++) {

for (int х = о; х < mat[y].length; х++)

system.out.print(mat[y][x] + " ");

system.out.println();

При создании массива должна быть указана, по меньшей мере, его первая, "самая левая", размерность. Другие размерности разрешается не задавать – в этом случае их придется определить позже. Указание в операторе new единовременно всех размерностей – это самый лаконичный способ создания массива, позволяющий избежать необходимости использования дополнительных операторов new. Выражение объявления и создания массива mat, приведенное выше, равнозначно следующему фрагменту кода:

float mat = new float;

for (int у = о; у < mat.length; у++)

mat[y] = new float;

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

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

При создании массива каждый его элемент получает значение, предусмотренное по умолчанию и зависящее от типа массива: нуль (0) – для числовых типов, ‘\u0000′ _ для char, false – для boolean и null – для ссылочных типов. Объявляя массив ссылочного типа, мы на самом деле определяем массив переменных этого типа. Рассмотрим следующий фрагмент кода:

Attr attrs = new Attr;

for (int i = о; i < attrs.length; i++)

attrs[i] = new Attr(names[i], values[i]);

После выполнения первого выражения, содержащего оператор new, переменная attrs получит ссылку на массив из 12 переменных, которые инициализированы значением null, Объекты Attr как таковые будут созданы только в процессе про хождения цикла.

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

String dangers = { "Львы", "Тигры", "Медведи" };

Следующий фрагмент кода даст тот же результат:

String dangers = new String; dangers = "Львы";

dangers = "Тигры";

dangers = "Медведи";

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

String dangers = new String { "Львы", "Тигры", "Медведи" };

Подобную форму объявления и инициализации массива разрешается применять в любом месте кода, например в выражении вызова метода:

printStringsCnew String { "раз", "два", "три" });

Массив без названия, который создается таким образом, называют анонимным (anonymous).

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

int pascalsTriangle = {

{ 1, 4, 6, 4, 1 },

Индексы многомерных массивов следуют в порядке от внешнего к внутренним. Так, например, pascalsTriangle);

// Пример для иллюстрации создания array
// целых чисел, помещает некоторые значения в массив,
// и выводит каждое значение.

class GFG
{
{
int arr;

// allocating memory for 5 integers.
arr = new int;


arr = 10;


arr = 20;

//so on...
arr = 30;
arr = 40;
arr = 50;

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
System.out.println("Element at index " + i +
" : "+ arr[i]);
}
}
В итоге получаем:

Element at index 0: 10 Element at index 1: 20 Element at index 2: 30 Element at index 3: 40 Element at index 4: 50

Массивы объектов

Массив объектов создается так же, как элементов данных следующим образом:

Student arr = new Student;

StudentArray содержит семь элементов памяти каждый из класса student, в котором адреса семи объектов Student могут быть сохранены. Student объекты должны быть созданы с помощью конструктора класса student и их ссылки должны быть присвоены элементам массива следующим образом:

Student arr = new Student;

// Java program to illustrate creating an array of
// objects

class Student
{
public int roll_no;
public String name;
Student(int roll_no, String name)
{
this.roll_no = roll_no;
this.name = name;
}
}

// Elements of array are objects of a class Student.
public class GFG
{
public static void main (String args)
{
// declares an Array of integers.
Student arr;

// allocating memory for 5 objects of type Student.
arr = new Student;

// initialize the first elements of the array
arr = new Student(1,"aman");

// initialize the second elements of the array
arr = new Student(2,"vaibhav");

// so on...
arr = new Student(3,"shikar");
arr = new Student(4,"dharmesh");
arr = new Student(5,"mohit");

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
System.out.println("Element at " + i + " : " +
arr[i].roll_no +" "+ arr[i].name);
}
}

Получаем:

Element at 0: 1 aman Element at 1: 2 vaibhav Element at 2: 3 shikar Element at 3: 4 dharmesh Element at 4: 5 mohit

Что произойдет, если мы попытаемся получить доступ к элементу за пределами массива?
Компилятор создает исключение ArrayIndexOutOfBoundsException, указывающее, что к массиву был получен доступ с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива.

Многомерные

Многомерные массивы — это массивы массивов, каждый элемент которых содержит ссылку на другой массив. Создается путем добавления одного набора квадратных скобок () для каждого измерения. Рассмотрим пример:

Int intArray = new int; //a 2D array or matrix int intArray = new int; //a 3D array

Class multiDimensional
{
public static void main(String args)
{
// declaring and initializing 2D array
int arr = { {2,7,9},{3,6,1},{7,4,2} };

// printing 2D array
for (int i=0; i< 3 ; i++)
{
for (int j=0; j < 3 ; j++)
System.out.print(arr[i][j] + " ");

System.out.println();
}
}
}

Output: 2 7 9 3 6 1 7 4 2


Передача массивов в метод

Как и переменные, мы можем передавать массивы в методы.

// Java program to demonstrate // passing of array to method class Test { // Driver method public static void main(String args) { int arr = {3, 1, 2, 5, 4}; // passing array to method m1 sum(arr); } public static void sum(int arr) { // getting sum of array values int sum = 0; for (int i = 0; i < arr.length; i++) sum+=arr[i]; System.out.println("sum of array values: " + sum); } }

На выходе получим:

sum of array values: 15

Возврат массивов из методов

Как обычно, метод также может возвращать массив. Например, ниже программа возвращает массив из метода m1.

// Java program to demonstrate // return of array from method class Test { // Driver method public static void main(String args) { int arr = m1(); for (int i = 0; i < arr.length; i++) System.out.print(arr[i]+" "); } public static int m1() { // returning array return new int{1,2,3}; } }

Объекты класса

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

// Java program to demonstrate // Class Objects for Arrays class Test { public static void main(String args) { int intArray = new int; byte byteArray = new byte; short shortsArray = new short; // array of Strings String strArray = new String; System.out.println(intArray.getClass()); System.out.println(intArray.getClass().getSuperclass()); System.out.println(byteArray.getClass()); System.out.println(shortsArray.getClass()); System.out.println(strArray.getClass()); } }

class +" "); } } }

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

// Java program to demonstrate // cloning of multi-dimensional arrays class Test { public static void main(String args) { int intArray = {{1,2,3},{4,5}}; int cloneArray = intArray.clone(); // will print false System.out.println(intArray == cloneArray); // will print true as shallow copy is created // i.e. sub-arrays are shared System.out.println(intArray == cloneArray); System.out.println(intArray == cloneArray); } }

false
true
true