JavaRush /Java Blog /Random-ID /Array multidimensi

Array multidimensi

Dipublikasikan di grup Random-ID
Array multidimensi - 1

Apa itu array Java satu dimensi?

Array adalah kumpulan elemen yang bertipe sama, primitif, atau referensi. Informasi umum tentang array (kebanyakan satu dimensi) dapat ditemukan di artikel “ Array di Java ” dan di kursus JavaRush . Pada artikel ini kita akan membahas tentang array yang elemennya merupakan array lain. Array seperti ini disebut multidimensi. Array yang elemennya merupakan array lain, yaitu array dari array, disebut dua dimensi. Tidak semua bahasa memiliki array multidimensi yang terstruktur seperti ini, tetapi di Java hal ini terjadi.

Array Multidimensi Java, Sintaks Umum

Secara umum, array multidimensi di Java terlihat seperti ini:
Data_type[dimension1][dimension2][]..[dimensionN] array_name = new data_type[size1][size2].[sizeN];
Dimana Data_typetipe elemen dalam array. Bisa primitif atau referensi (kelas). Jumlah pasangan tanda kurung dengan dimensiondi dalam adalah dimensi array (dalam kasus kami - N). array_name— nama array size1...sizN— jumlah elemen di setiap dimensi array. Mendeklarasikan array multidimensi:
int[][] twoDimArray; //two-dimensional array
String[][][] threeDimArray; //three-dimensional array
double[][][][][] fiveDimArray; // five-dimensional array
Mungkin semua ini terlihat sangat abstrak, jadi sekarang mari kita beralih ke manifestasi konkret dari array multidimensi - dua dimensi dan tiga dimensi. Faktanya adalah bahwa pengembang Java terkadang menggunakan array dua dimensi, apalagi array tiga dimensi, dan bahkan array yang lebih besar pun sangat jarang. Kemungkinan besar Anda tidak akan menemukannya.

Array multidimensi dalam kursus JavaRush

Di JavaRush, array "biasa" dimulai pada level 7 dari pencarian Sintaks Java , dan kemudian dalam kursus tersebut array tersebut ditemukan lebih dari sekali. Terkadang sepanjang kursus Anda menemukan masalah yang melibatkan array dua dimensi (atau masalah yang dapat diselesaikan dengan bantuannya). Array dua dimensi juga digunakan di mesin game bagian khusus “ Game di JavaRush ”. Jika Anda belum pernah ke sana, lihat dan buat satu atau dua permainan. Syarat dan ketentuan dilengkapi dengan instruksi terperinci dan akan memberikan pelatihan yang sangat baik dalam keterampilan pemrograman. Array tiga dimensi dapat ditemukan di game Space Invaders . Melalui itu, satu set frame untuk animasi ditentukan (dan masing-masing frame ini adalah array dua dimensi). Jika Anda sudah menyelesaikan misi JavaSyntax atau hanya merasa percaya diri dengan pemrograman Java, cobalah menulis versi Anda sendiri untuk game klasik ini.

Apa itu array Java dua dimensi?

Array dua dimensi di Java adalah array dari array, yaitu setiap sel berisi referensi ke array. Namun akan lebih mudah untuk menyajikannya dalam bentuk tabel yang memiliki jumlah baris (dimensi pertama) dan jumlah kolom (dimensi kedua) tertentu. Array dua dimensi yang semua barisnya mempunyai jumlah elemen yang sama disebut persegi panjang.

Mendeklarasikan, membuat dan menginisialisasi array dua dimensi

Prosedur untuk mendeklarasikan dan membuat array dua dimensi hampir sama dengan array satu dimensi:
int[][] twoDimArray = new int[3][4];
Array ini memiliki 3 baris dan 4 kolom. Ukuran array dua dimensi persegi panjang (tidak boleh persegi panjang, lebih lanjut di bawah), yaitu, jumlah elemen dapat ditentukan dengan mengalikan jumlah baris dengan jumlah kolom. Sekarang diinisialisasi (diisi) dengan nilai default. Artinya, nol. Mari kita isi dengan nilai-nilai yang kita butuhkan.
twoDimArray[0][0] = 5;//write the value 5 into the cell at the intersection of the zero row and zero column
twoDimArray[0][1] = 7; //write the value 7 into the cell at the intersection of the zero row and the first column
twoDimArray[0][2]  = 3;
twoDimArray[0][3] = 17;
twoDimArray[1][0] = 7;
twoDimArray[1][1] = 0;
twoDimArray[1][2] = 1;
twoDimArray[1][3] = 12;
twoDimArray[2][0] = 8;
twoDimArray[2][1] = 1;
twoDimArray[2][2] = 2;
twoDimArray[2][3] = 3;
Seperti halnya array satu dimensi, Anda dapat melakukan prosedur inisialisasi lebih cepat:
int [][] twoDimArray = {{5,7,3,17}, {7,0,1,12}, {8,1,2,3}};
Dalam kedua kasus tersebut, kita akan mendapatkan array dua dimensi dengan tiga baris dan empat kolom, diisi dengan bilangan bulat. Array multidimensi - 2

Menampilkan array dua dimensi di layar

Cara paling logis untuk melakukan operasi ini adalah dengan mengeluarkan elemen garis nol demi elemen terlebih dahulu, lalu yang kedua, dan seterusnya. Cara paling umum untuk menghasilkan array dua dimensi di Java adalah dengan menggunakan dua loop bersarang.
int [][] twoDimArray = {{5,7,3,17}, {7,0,1,12}, {8,1,2,3}};//declared an array and filled it with elements
for (int i = 0; i < 3; i++) {  //go through the lines
            for (int j = 0; j < 4; j++) {//go through the columns
                System.out.print(" " + twoDimArray[i][j] + " "); //output element
            }
            System.out.println();// line wrap for the visual preservation of the tabular form
        }

Output cepat dari array dua dimensi

Cara terpendek untuk menampilkan daftar elemen array dua dimensi di layar adalah dengan menggunakan metode deepToStringkelas Arrays. Contoh:
int[][] myArray = {{18,28,18},{28,45,90},{45,3,14}};
System.out.printLn(Arrays.deepToString(myArray));
Hasil dari program ini adalah keluaran sebagai berikut: [[18, 28, 18], [28, 45, 90], [45, 3, 14]]

“Panjang” array dua dimensi

Untuk mendapatkan panjang array satu dimensi (yaitu jumlah elemen di dalamnya), Anda dapat menggunakan variabel length. Artinya, jika kita mendefinisikan sebuah array int a[] = {1,2,3}, maka operasinya a.lengthakan menghasilkan 3. Namun bagaimana jika kita menerapkan prosedur yang sama pada array dua dimensi kita?
int [][] twoDimArray = {{5,7,3,17}, {7,0,1,12}, {8,1,2,3}};
System.out.println(twoDimArray.length);
Output: 3 Jadi operasi ini menampilkan jumlah baris dalam array. Bagaimana cara mendapatkan jumlah kolom? Jika kita berurusan dengan array dua dimensi persegi panjang (yaitu array yang semua garisnya memiliki panjang yang sama), maka kita dapat menerapkan operasi twoDimArray[0].lengthatau alih-alih elemen nol (pada dasarnya garis nol) - elemen lain yang sudah ada. Kita dapat melakukan ini karena di Java, array dua dimensi adalah array dari array, dan elemen nol twoDimArray[0]adalah array dengan panjang 4. Anda dapat memeriksanya sendiri.

Contoh penggunaan array dua dimensi: kotak-kotak

Array dua dimensi dapat digunakan untuk membuat bidang dua dimensi berhingga, misalnya dalam permainan, dan khususnya dalam catur. Sangat mudah untuk menganggap papan catur sebagai susunan dua dimensi. Anda dapat "melampirkan" grafik ke dalamnya, tetapi untuk saat ini, mari kita definisikan papan catur menggunakan simbol dan mengeluarkannya ke konsol. Array multidimensi - 3Kotak kiri bawah papan catur dicat hitam, kotak berikutnya berwarna putih, begitu pula kotak di atasnya. Jadi, warnanya berubah setiap kali Anda berpindah ke sel yang berdekatan di sampingnya. Untuk mengatur pewarnaan catur tidak secara manual, tetapi menggunakan algoritma, Anda dapat menggunakan pemeriksaan paritas: jika jumlah indeks baris dan kolom genap atau nol, maka sel akan berwarna putih, jika tidak maka akan menjadi hitam. Untuk pemeriksaan ini, kami menggunakan operator sisa % dalam algoritma. Karena kita tidak bekerja dengan grafik, tetapi dengan simbol, kita akan menandai sel putih dengan huruf W(putih), dan sel hitam dengan huruf B(hitam).
//set the chessboard as a two-dimensional array
String [][] chessBoard = new String[8][8];
        for (int i = 0; i< chessBoard.length; i++) {
            for (int j = 0; j < chessBoard[0].length; j++) {
                if ((i + j) % 2 == 0) chessBoard[i][j] = "W";
                else chessBoard[i][j] = "B";
            }
        }
Output dari program ini adalah sebagai berikut: WBWBWBWBBWBWBWBWWBWBW BWBBWBWBWBWWBWBWBWBBW BWBWBWWBWBWBWBBWBWBWB W Semuanya seperti di papan catur sungguhan, Anda dapat memeriksanya. Array multidimensi - 4Sekarang mari kita tulis metode untuk memberi nomor sel dengan benar bukan dalam bahasa array, tetapi dalam bahasa “catur”. Sel kiri bawah pada papan disebut A1, sedangkan dalam array kita disebut chessBoard[7][0]. Mari kita kaitkan setiap pasangan indeks array dua dimensi dengan ekuivalen “catur”-nya. Untuk melakukan ini, kami menggunakan dua baris - " abcdefgh" dan " 87654321" (dalam urutan terbalik - untuk kesederhanaan, sehingga kotak-kotak 8 sesuai dengan kolom nol).
public static String chessBoardCoord(int a, int b) {
            String letters = "abcdefgh";
            String numbers = "87654321";
            if ((a > 7)|| (b>7)) return null; //if the number is outside the board, return the default value - null
            else return (Character.toString(letters.charAt(a)) + numbers.charAt(b)); /*charAt - a method with which we extract from the string the element under the passed number, here - under the numbers a and b. Character.toString - a method that converts the received character into a string */
        }
Sekarang mari kita tampilkan di setiap sel tidak hanya warnanya, tetapi juga nomornya, menggunakan metode inichessBoardCoord
String [][] chessBoard = new String[8][8];
        for (int i = 0; i < chessBoard.length; i++) {
            for (int j = 0; j < chessBoard[0].length; j++) {
                if ((i + j) % 2 == 0) chessBoard[i][j] = "W" + chessBoardCoord(j,i);
                else chessBoard[i][j] = "B"+ chessBoardCoord(j,i);
            }
        }

            for (int i = 0; i < chessBoard.length; i++) {
                for (int j = 0; j < chessBoard[0].length; j++) {
                    System.out.print(" " + chessBoard[i][j] + " ");
                }
                System.out.println();
            }
Keluaran program: Wa8 Bb8 Wc8 Bd8 We8 Bf8 Wg8 Bh8 Ba7 Wb7 Bc7 Wd7 Be7 Wf7 Bg7 Wh7 Wa6 Bb6 Wc6 Bd6 We6 Bf6 Wg6 Bh6 Ba5 Wb5 Bc5 Wd5 Be5 Wf5 Bg5 Wh5 Wa4 Bb4 Wc4 Bd4 We4 Bf4 Wg4 Bh4 Ba3 Wb3 Bc3 Wd 3 Menjadi3 Wf3 Bg3 Wh3 Wa2 Bb2 Wc2 Bd2 We2 Bf2 Wg2 Bh2 Ba1 Wb1 Bc1 Wd1 Be1 Wf1 Bg1 Wh1 Dimana We2artinya kotak putih bernomor e2.

Contoh penggunaan array dua dimensi: perkalian matriks

Perhatian!Contoh ini membutuhkan pengetahuan dasar tentang matriks. Di sini sangat sedikit yang akan dibahas tentangnya, dan informasi ini ditujukan bagi mereka yang telah mempelajari, tetapi agak lupa, aritmatika matriks. Namun pengetahuan tersebut dapat diperoleh dari sumber terbuka, khususnya dari artikel di Wikipedia . Ini adalah contoh bagus dalam menggunakan array dua dimensi, namun kita dapat melanjutkan tanpanya. Jadi, jika hal ini tampaknya tidak dapat Anda pahami dari sudut pandang matematika, dan Anda tidak benar-benar ingin mempelajarinya, silakan lewati contoh ini. Jika Anda telah mempelajari aljabar linier dasar, Anda mungkin telah mempelajari tentang array persegi panjang sebagai matriks persegi panjang. Array multidimensi - 5Dimana a11, a12... aNN adalah beberapa angka. Pada gambar, matriksnya bukan persegi panjang, melainkan persegi (jumlah baris sama dengan jumlah kolom, tetapi hal ini tidak selalu terjadi). Dalam kehidupan nyata, matriks seperti itu jarang ditemui, tetapi dalam pemrograman dan ilmu komputer, matriks tersebut sangat umum. Secara khusus, mereka digunakan dalam grafik komputer dan mesin permainan. Misalnya, rotasi suatu objek di layar ke sudut mana pun dapat diprogram menggunakan matriks rotasi. Dalam ruang dua dimensi, matriks rotasinya terlihat seperti ini: Array multidimensi - 6Dimana theta adalah sudut yang dilalui benda untuk diputar. Matriks-matriks yang berdimensi sama dapat dijumlahkan satu sama lain, dan penjumlahan terjadi elemen demi elemen (kita menambahkan elemen dengan indeks yang sama). Namun pengoperasian perkalian matriks kurang familiar. Jadi, matriks dapat dikalikan dan matriks yang dihasilkan hanya dapat diperoleh jika jumlah kolom matriks pertama sama dengan jumlah baris matriks kedua. Matriks hasil akan mempunyai jumlah baris yang sama dengan matriks pertama dan jumlah kolom yang sama dengan matriks kedua. Perkalian dilakukan sebagai berikut. Mari kita memiliki matriks a[l][m]dan b[m][n]. Sebagai hasil perkaliannya, kita akan memperoleh matriks c[l][n]. Untuk mendapatkan elemen c[0][0]matriks produk, Anda perlu a[0][0]mengalikan elemen nol dari baris nol matriks pertama dengan elemen nol dari matriks kedua, kemudian mengalikan elemen pertama dari baris pertama matriks pertama dengan elemen pertama dari kolom pertama matriks kedua, dan seterusnya, setelah itu semua hasil perkalian dijumlahkan.

a[0][0]*b[0][0] + a[0][1]*b[1][0] + … + a[0][m-1]*b[m-1][0]
Untuk mendapatkan elemen kedua dari baris pertama matriks hasil, kita melakukan prosedur yang sama dengan baris kedua

a[1][0]*b[0][0] + a[1][1]*b[0][1] + … + a[0][m-1]*b[m-1][0]
Begitu seterusnya sampai akhir baris. Kemudian kita lanjutkan ke baris berikutnya dan ulangi prosedurnya sampai kita kehabisan baris. Artinya, kita mengalikan baris matriks pertama dengan kolom matriks kedua. Di bawah ini adalah kode perkalian matriks. Anda dapat melengkapinya dengan pemeriksaan kepatuhan terhadap kondisi jumlah baris dan kolom yang disebutkan di atas.
//declaring two matrices
int [][] twoDimArray1 = {{1,0,0,0},{0,1,0,0},{0,0,0,0}};
int[][] twoDimArray2 = {{1,2,3},{1,1,1},{0,0,0},{2,1,0}};

//matrix multiplication process
int[][]twoDimArray3 = new int [twoDimArray1.length][twoDimArray2[0].length];
        for (int i=0; i<twoDimArray3[0].length; i++)
            for (int j=0; j<twoDimArray3.length; j++)
                for (int k=0; k<twoDimArray1[0].length; k++)
                              twoDimArray3[i][j] = twoDimArray3[i][j] + twoDimArray1[i][k] * twoDimArray2[k][j];

//output on display
        for (int i = 0; i < twoDimArray3.length; i++) {
            for (int j = 0; j < twoDimArray3[0].length; j++) {
                System.out.print(" " + twoDimArray3[i][j] + " ");
            }
            System.out.println();
        }
Program mengeluarkan hasil sebagai berikut: 1 2 3 1 1 1 0 0 0

Array dua dimensi tidak persegi panjang

Karena array dua dimensi adalah array dari array di Java, masing-masing array bagian dalam dapat memiliki panjang yang berbeda. Saat membuat array, kita hanya dapat menentukan jumlah baris dan bukan jumlah kolom (yaitu, panjang baris yang sama). Mari kita lihat sebuah contoh.
//declaring and creating an array, specifying only the number of rows
int [][] twoDimArray = new int[5][];

//initialize the array, filling it with arrays of different lengths
        twoDimArray[0] = new int[]{1, 2, 3, 4, 5};
        twoDimArray[1] = new int[]{1,2,3,4};
        twoDimArray[2] = new int[]{1,2,3};
        twoDimArray[3] = new int[]{1,2};
        twoDimArray[4] = new int[]{1};
//display the resulting non-rectangular two-dimensional array on the screen
        for (int i = 0; i < twoDimArray.length; i++) {
            for (int j = 0; j < twoDimArray[i].length; j++) {
                System.out.print(" " + twoDimArray[i][j] + " ");
            }
            System.out.println();
        }
Output program: 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 Jadi, baris ke nol dari array kita berisi array {1,2,3,4,5}, dan baris keempat berisi array {1}.

Array tiga dimensi di Java

Mengikuti akal sehat dan logika bahasa Java, array tiga dimensi dapat disebut sebagai “array of arrays of arrays” atau “array yang setiap elemennya merupakan array dua dimensi.” Selain itu, array dua dimensi ini bisa berbeda. Contoh:
// create a three-dimensional array consisting of two two-dimensional arrays
int[][][] threeDimArr = new int[2][][];
//create the first 2D array of a 5x2 3D array
        threeDimArr[0] = new int[5][2];
//create a second 2D array of a 1x1 3D array
        threeDimArr[1] = new int[1][1];
Namun lebih sering dalam praktiknya terdapat array tiga dimensi yang ketiga besarannya didefinisikan sekaligus, analog dengan array dua dimensi persegi panjang. Array multidimensi - 7Seperti yang telah kami sebutkan, array tiga dimensi atau lebih sangat jarang digunakan. Namun, Anda dapat memprogram sesuatu yang menarik dengan susunan 3D. Misalnya tempat parkir mobil bertingkat. Setiap lantai dapat dianggap sebagai susunan dua dimensi, dan tempat parkir dapat dianggap sebagai elemen spesifik dari susunan tiga dimensi. Elemen array seperti itu dapat diwakili oleh tipe booleandengan nilai false jika ruangnya kosong dan true jika ruangnya terisi.
//set a boolean three-dimensional array. This car park has 3 floors, each of which can accommodate 2x5 = 10 cars. By default, all cells are empty (false)
boolean[][][] parkingLot = new boolean[3][2][5];
//two cars arrived and parked on the ground floor in cell [1][0] and [1][3]
        parkingLot[0][1][0] = true;
        parkingLot[0][1][3] = true;

//Output the array to the console
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < 5; k++) {
                    System.out.print("arr[" + i + "][" + j + "][" + k + "] = " + parkingLot[i][j][k] + "\t");

                }
                System.out.println();
            }
        }

Array multidimensi dalam karya nyata seorang programmer Java

Pada kenyataannya, sebagian besar pengembang Java tidak terlalu sering menemukan array multidimensi. Namun, ada sejumlah tugas yang sangat cocok untuk struktur data ini.

  1. Untuk pengujian dan pengaturan matriks sebagai konstanta untuk memeriksa algoritma tertentu.
  2. Terkadang array multidimensi digunakan untuk jaringan saraf.
  3. Array multidimensi cocok untuk pengarsip.
  4. Bekerja dengan gambar.

Masalah menarik pada array dua dimensi dan tiga dimensi

Anda cukup mengetahui tentang array multidimensi di Java dan jika Anda merasa yakin, Anda dapat mencoba menyelesaikan beberapa masalah di bawah ini. Itu tidak mudah, tapi menarik. Tic-tac-toe. Siapkan lapangan 3x3, buat dua pemain yang bergantian. Awalnya, lapangan kosong, dan di setiap bidang kosong, pemain pertama dapat memberi tanda silang, dan pemain kedua dapat memberi tanda nol. Pemenangnya adalah orang yang pertama kali mengumpulkan tiga tanda silang atau tiga angka nol yang disusun dalam satu baris, satu kolom atau diagonal.

Apa lagi yang harus dibaca

Game Java untuk pemula

Semut Langton . Ada bidang tertentu, dibagi menjadi sel (array dua dimensi), dicat hitam atau putih (dapat diatur dengan fungsi acak). Seekor “semut” muncul secara acak di salah satu sel, dan pada setiap langkah ia dapat bergerak ke salah satu dari empat arah ke sel yang berdekatan, secara horizontal atau vertikal. Aturan pergerakan semut:
  • Pada kotak hitam, semut harus berbelok 90° ke kiri, mengubah warna selnya menjadi putih, lalu melangkah maju ke kotak berikutnya.
  • Pada kotak putih, semut berbelok 90° ke kanan dan mengubah warna selnya menjadi hitam, lalu melangkah maju ke kotak berikutnya.
Tuliskan metode yang menghitung iterasi pada nomor langkah nberdasarkan posisi awal semut. Bidang tersebut dapat diisi secara acak dengan angka nol dan satu (atau dilambangkan dengan huruf Wdan B, seperti yang kita lakukan pada contoh papan catur). Kita juga memerlukan dua parameter lagi - posisi horizontal dan vertikal semut, serta arahnya pada langkah ini (utara, selatan, barat, timur), sedangkan secara default semut melihat ke utara. Anda dapat mencoba memodelkan kubus Rubik menggunakan array tiga dimensi. Kubus Rubik standar memiliki 6 sisi, dan masing-masing sisi merupakan susunan kotak berwarna tiga dimensi Color[][][] rubik = new Color[6][3][3]. Namun, mengimplementasikan kubus Rubik bukanlah tugas yang mudah.

Materi yang berguna tentang array

Banyak artikel di JavaRush dikhususkan untuk array (terutama array satu dimensi, karena array lebih sering digunakan dalam praktik). Perhatikan mereka.
  1. Array di Java - tentang array untuk pemula dengan contoh
  2. Sesuatu Tentang Array - Artikel mendetail yang bagus tentang array
  3. Kelas Array dan penggunaannya - artikel ini menjelaskan beberapa metode kelasArray
  4. Array adalah kuliah JavaRush pertama yang didedikasikan untuk array.
  5. Mengembalikan array dengan panjang nol, bukan null - Penulis Pemrograman Efektif Joshua Bloch berbicara tentang cara mengembalikan array kosong dengan lebih baik
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION