Creating a Multidimensional Array
int[][] arr1; // 2D array int arr2[][]; // 2D array int[] arr3[]; // 2D array int[] arr4[], arr5[][]; // 2D array and 3D array String[][] arr6 = new String[3][2]; // 3 arrays with 2 elements, [0][0]-[2][1]
Öncəki mövzuda qeyd etmişdik ki, təkölçülü massiv yaradılarkən ölçüsü mütləq qeyd edilməlidir. Amma çoxölçülü massivlərdə sonuncu ölçü buraxıla bilər, məsələn biz massivi aşağıdakı şəkildə yarada bilərik:
int[][] a = new int[2][];
Bu massivin əgər ikinci ölçüsü tanımlanmırsa null
hesab edilir. Yəni bu ikiölçülü massiv özü iki massivdən (a[0]
və a[1]
) ibarətdir və hər iki massiv null`dur:
int[] a[] = new int[2][]; System.out.println(a[0]); // output: null System.out.println(a[0][1]); // throws NullPointerException
Amma null
olan massivlərə təkrar yeni dəyər mənimsədilə bilər:
int[][] arr = new int[4][]; arr[0] = new int[5]; arr[1] = new int[3]; arr[2] = new int[2]; arr[3] = new int[0]; arr[4] = new int[1]; // throws ArrayIndexOutOfBoundsException arr[5] = new int[]; // does not compile arr[1] = new Integer[2]; // does not compile
Biz yuxarıda ölçünün qeyd edilməməsi ilə bağlı 2 ölçülü massiv nümunəsinə baxdıq, amma çoxölçülü massivlərdə bir neçə ölçü buraxıla, qeyd edilməyə bilər. Bir şərtlə ki, birinci ölçü qeyd edilsin və buraxılan ilk ölçüdən sonra heç bir ölçü qeyd edilməsin (sağda). Nümunə üzərindən daha aydın olacaq:
int a[][][][] = new int[4][3][3][2]; int b[][][][] = new int[4][3][][]; int c[][][][] = new int[4][][][]; int d[][][][] = new int[4][][3][]; // does not compile
Qeyd etmişdik ki, hər massiv bir obyektdir. Biz boş massiv yaratmaq üçün {}
– fiqurlu mötərizələrdən istifadə edirik. Bu boş massiv özü bir obyekt hesab edilsə də biz bu sintaksisi birbaşa Object
tipində olan dəyişənə mənimsədə bilmərik. Nümunə üzərindən baxsaq daha anlaşıqlı olacaq:
String strArr[] = {}; Object objArr1[] = {}; Object obj2 = strArr; Object obj3 = {}; // does not compile Object objArr2[] = {"str", 7, {} }; // does not compile
Sonuncu sətirdə 7
primitiv tip olsa da autoboxing sayəsində Ineteger
‘ə çevrilir və Object
tip hesab edilir. Bu səbəbdən xəta vermir, xəta verən sonuncu elementdir.
Tutaq ki, 4 ölçülü massiv elan etmişik. Bu massivə mənimsədilən dəyərin də 4 ölçülü olub olmamasını təyin etmək üçün açılan mötərizələrin sayına fikir vermək lazımdır.
String[][][][] array4D = { { null, { { }, { "x" }, null }, { { "y" } }, { { "z", "p" }, { } } } }; // 1o 2o 3o 4o 4c 4o 4c 3c 3o 4o 4c 3c 3o 4o 4c 4o 4c 3c 2c 1c
o – opening curly brace
c – closing curly brace
Ətraflı:
http://www.coderanch.com/t/648777/ocajp/certification/Review-Multidimensional-Array
Using a Multidimensional Array
int[][] twoD = new int[3][2]; for(int i=0; i < twoD.length; i++){ for(int j=0; j < twoD[i].length; j++) System.out.print(twoD[i][j] + " "); System.out.println(); }
Output:
0 0
0 0
0 0
forEach dövrü ilə bunu daha sadə formada yazmaq olar:
for(int[] inner: twoD){ for(int num: inner) System.out.print(num+" "); System.out.println(); }
[topics lang=az]