- Getting the array length of a 2D array in Java
- 13 Answers 13
- Java получить размерности двумерного массива
- Длина массива
- Многомерные массивы
- Многомерные массивы в Java
- Длина многомерного массива в Java
- Трехмерный массив в Java
- Многомерные массивы Java
- Как инициализировать двумерный массив Java?
- Как инициализировать многомерный массив Java?
Getting the array length of a 2D array in Java
I need to get the length of a 2D array for both the row and column. I’ve successfully done this, using the following code:
Notice that I actually have to reference a particular row, in order to get the column length. To me, this seems incredibly ugly. Additionally, if the array was defined as:
Then the code would fail when trying to get the length. Is there a different (more intelligent) way to do this?
13 Answers 13
public static void main(String[] args) < int[][] foo = new int[][] < new int[] < 1, 2, 3 >, new int[] < 1, 2, 3, 4>, >; System.out.println(foo.length); //2 System.out.println(foo[0].length); //3 System.out.println(foo[1].length); //4 >
Column lengths differ per row. If you’re backing some data by a fixed size 2D array, then provide getters to the fixed values in a wrapper class.
Unrelated question about your answer. What is the technique/method called where you put «<. >;» after the object definition. As a new developer I keep seeing this more and more.
Not sure what the name of it is — object initialization? inline initialization? one of our Java Gurus will know
Per JLS 10.6 and 15.10, the curly braces part is simply an Array Initializer, while the whole thing starting with new is an Array Creation Expression.
Also, if you accept a 2D array as input, e.g. in a constructor. You should check it and throw exceptions where applicable.
A 2D array is not a rectangular grid. Or maybe better, there is no such thing as a 2D array in Java.
import java.util.Arrays; public class Main < public static void main(String args[]) < int[][] test; test = new int[5][];//'2D array' for (int i=0;i>
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]] [[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
The arrays test and test2 are (more or less) the same.
It was really hard to remember that
int numberOfColumns = arr.length; int numberOfRows = arr[0].length;
Let’s understand why this is so and how we can figure this out when we’re given an array problem. From the below code we can see that rows = 4 and columns = 3:
arr has multiple arrays in it, and these arrays can be arranged in a vertical manner to get the number of columns. To get the number of rows, we need to access the first array and consider its length. In this case, we access [1, 1, 1, 1] and thus, the number of rows = 4. When you’re given a problem where you can’t see the array, you can visualize the array as a rectangle with n X m dimensions and conclude that we can get the number of rows by accessing the first array then its length. The other one ( arr.length ) is for the columns.
Java получить размерности двумерного массива
Массив представляет набор однотипных значений. Объявление массива похоже на объявление обычной переменной, которая хранит одиночное значение, причем есть два способа объявления массива:
тип_данных название_массива[]; // либо тип_данных[] название_массива;
Например, определим массив чисел:
После объявления массива мы можем инициализовать его:
int nums[]; nums = new int[4]; // массив из 4 чисел
Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов] , где new — ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, nums = new int[4]; — в этом выражении создается массив из четырех элементов int, и каждый элемент будет иметь значение по умолчанию — число 0.
Также можно сразу при объявлении массива инициализировать его:
int nums[] = new int[4]; // массив из 4 чисел int[] nums2 = new int[5]; // массив из 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[4]; // устанавливаем значения элементов массива nums[0] = 1; nums[1] = 2; nums[2] = 4; nums[3] = 100; // получаем значение третьего элемента массива System.out.println(nums[2]); // 4
Индексация элементов массива начинается с 0, поэтому в данном случае, чтобы обратиться к четвертому элементу в массиве, нам надо использовать выражение nums[3] .
И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5; . Если мы так попытаемся сделать, то мы получим ошибку.
Длина массива
Важнейшее свойство, которым обладают массивы, является свойство length , возвращающее длину массива, то есть количество его элементов:
int[] nums = ; int length = nums.length; // 5
Нередко бывает неизвестным последний индекс, и чтобы получить последний элемент массива, мы можем использовать это свойство:
int last = nums[nums.length-1];
Многомерные массивы
Ранее мы рассматривали одномерные массивы, которые можно представить как цепочку или строку однотипных значений. Но кроме одномерных массивов также бывают и многомерными. Наиболее известный многомерный массив — таблица, представляющая двухмерный массив:
int[] nums1 = new int[] < 0, 1, 2, 3, 4, 5 >; int[][] nums2 = < < 0, 1, 2 >, < 3, 4, 5 >>;
Визуально оба массива можно представить следующим образом:
Многомерные массивы в Java
Двумерные массивы Java – это прямоугольная или не прямоугольная таблица чисел.
Двумерный массив Java состоит из рядов и столбцов.
Первый индекс двумерного массива Java – это число рядов.
Пример двумерного прямоугольного массива Java:
Здесь объявлен и определен двумерный массив, имеющий две строки и два столбца.
Загрузим массив элементами:
Вывод двумерного массива (перебираем массив):
Получаем:
мы проходим по рядам, а в цикле
Можно объявить и определить многомерный массив одновременно:
Длина многомерного массива в Java
Что считать длиной многомерного массива, ведь у него несколько измерений? Длиной многомерного массива является его первая размерность. Пример:
Здесь три ряда по два элемента каждый. Первая размерность — три, это и есть длина двумерного массива.
Трехмерный массив в Java
Пример трехмерного массива в Java:
Здесь объявлен и определен трехмерный массив. Его можно представит как куб, состоящий из двух слоёв (layer), каждый слой состоит из двух рядов и двух столбцов, т.е. каждый слой — это двумерный массив.
Как заполнить трехмерный массив? Можно в цикле, но мы для примера вручную заполним:
Как вывести трехмерный массив? Или как перебрать трехмерный массив? Так:
мы проходим по слоям, в цикле
Многомерные массивы Java
В Java можно объявить массив массивов, известный как многомерный массив. К примеру:
Здесь мы видим двухмерный массив Java , который может содержать до 12 элементов типа int :
Не забывайте, что индексирование в Java начинается с нуля, поэтому первые элементы массива имеют индекс 0 , а не 1 .
Аналогично можно объявить и трёхмерный ( 3D ) массив. Например:
String[][][] personalInfo = new String[3][4][2];
В примере выше personalInfo — это трёхмерный массив, в котором может быть до 24 (3*4*2) элементов типа String .
В Java составляющие многомерного массива — это тоже массивы. Если вы знаете C/C++ , то может показаться, что многомерные массивы в Java и C/C++ работают одинаково. Но это не совсем так — в Java ряды массивов могут быть разной длины. Разницу мы увидим во время инициализации.
Как инициализировать двумерный массив Java?
Ниже приводится пример инициализации двумерного массива Java :
Каждый компонент массива также представляет собой массив, и длина каждого ряда отличается:
Давайте напишем программу, чтобы это доказать:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; System.out.println("Длина ряда 1: " + a[0].length); System.out.println("Длина ряда 2: " + a[1].length); System.out.println("Длина ряда 3: " + a[2].length); > >
При запуске этой программы мы получим:
Длина ряда 1: 3
Длина ряда 2: 4
Длина ряда 3: 1
Поскольку многомерный массив состоит из отдельных массивов (a[0], a[1] and a[2]) , можно использовать метод length для определения длины каждого ряда длины двумерного массива Java.
Пример: вывод на экран всех элементов двумерного массива с помощью циклов :
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int i = 0; i < a.length; ++i) < for(int j = 0; j < a[i].length; ++j) < System.out.println(a[i][j]); >> > >
Всегда лучше использовать цикл for…each , когда нужно пройти по элементам массива. Пример сортировки двумерного массива Java можно записать с помощью цикла for…each следующим образом:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int[] innerArray: a) < for(int data: innerArray) < System.out.println(data); >> > >
При запуске этой программы мы получим следующий результат заполнения двумерного массива Java :
Как инициализировать многомерный массив Java?
Многомерный или трёхмерный массив инициализируется почти так же, как двухмерный:
// test — трёхмерный массив int[][][] test = < < , >, < , , > >;
Трёхмерный массив — это массив, состоящий из двумерных массивов. Как и у двумерных массивов Java , его ряды могут быть различной длины.
Пример: программа для вывода элементов трёхмерного массива с помощью циклов :
class ThreeArray < public static void main(String[] args) < // test – трёхмерный массив int[][][] test = < < , >, < , , > >; // цикл for..each проходит по элементам трёхмерного массива for (int[][] array2D: test) < for (int[] array1D: array2D) < for(int item: array1D) < System.out.println(item); >> > > >
При запуске программы вывода двумерного массива Java получаем следующий результат:
1 -2 3 2 3 4 -4 -5 6 9 1 2 3
МК Михаил Кузнецов автор-переводчик статьи «