1. Susunan rong dimensi

Kasunyatan sing luwih menarik babagan array. Array ora mung siji dimensi (linear). Dheweke uga bisa dadi rong dimensi.

Apa tegese, sampeyan takon?

Iki tegese sel saka array bisa makili ora mung kolom (utawa baris), nanging uga meja persegi dowo.

int[][] name = new int[width][height];

Ing ngendi jeneng minangka jeneng variabel array, jembaré jembaré tabel (ing sel), lan dhuwur minangka dhuwur tabel. Tuladha:

int[][] data = new int[2][5];
data[1][1] = 5;
Kita nggawe array rong dimensi: 2 kolom lan 5 baris.
Tulis 5 menyang sel (1, 1).

Iki bakal katon ing memori:

Array loro-dimensi

Miturut cara, sampeyan uga bisa nggunakake initialization cepet kanggo array rong dimensi:

// Lengths of months of the year in each quarter
int[][] months = { {31, 28, 31}, {30, 31, 30}, {31, 31, 30}, {31, 30, 31} };

Ana akeh panggonan ing ngendi sampeyan, minangka programmer, mbutuhake array rong dimensi. Array loro-dimensi minangka dhasar saka meh kabeh game papan, kayata catur, catur, tic-tac-toe, lan perang laut:

Array loro dimensi 2

Array loro-dimensi sampurna kanggo catur utawa perang segara. Kita mung butuh angka saka koordinat sel. Ora 'pion e2-e4', nanging 'pion (5,2) -> (5,4)'. Iku bakal luwih gampang kanggo sampeyan minangka programmer.


2. Ngatur unsur ing larik: (x, y) utawa (y, x)

Miturut cara, ana dilema menarik ing kene:

Nalika nggawe larik nggunakake new int[2][5];, apa kita duwe tabel 'rong larik lan 5 kolom ' utawa 'loro kolom lan 5 larik '?" Kanthi tembung liyane, apa kita nemtokake ambane banjur dhuwure ... Kosok baline, pisanan dhuwur banjur jembaré? Ya, kaya sing asring kita ucapake, kabeh ora gampang banget ing kene.

Ayo dadi miwiti karo pitakonan saka carane Uploaded disimpen ing memori .

Mesthine, memori komputer ora bener duwe matriks: saben lokasi ing memori nduweni alamat numerik urutan: 0, 1, 2, ... Ing kasus kita, kita ngomong babagan matriks 2 × 5, nanging ing memori iku mung 10 sel consecutive, ora luwih. Ora ana sing nuduhake ing ngendi baris lan kolom kasebut.

Argumentasi kanggo "jembaré x dhuwur".

Argumentasi kanggo pendekatan iki yaiku saben wong sinau matematika ing sekolah, ing ngendi dheweke sinau yen pasangan koordinat ditulis minangka 'x' (yaiku, sumbu horisontal) banjur 'y' (dimensi vertikal). Lan iki ora mung standar sekolah - iku standar sing ditampa umum ing matématika. Kaya sing dikandhakake, sampeyan ora bisa mbantah karo matematika. Apa ngono? Jembar pisanan banjur dhuwur?

Argumen ing sih saka "dhuwur x jembaré".

Ana uga argumentasi sing menarik kanggo posisi iki: initialization cepet saka array rong dimensi. Pancen, yen kita pengin miwiti array, kita bisa nulis kode kaya iki:

// Matrix of important data
int[][] matrix = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };

Apa sampeyan ora weruh apa-apa? Apa yen kita duwe iki?

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {1, 2, 3, 4, 5}
};

Yen kita nulis data kita ing baris kode dening baris, banjur kita njaluk matriks karo 2 larik lan 5 kolom.

Garis ing ngisor

Apa sing bisa kita ucapake? Sampeyan bisa nemtokake endi sing luwih trep kanggo sampeyan. Sing paling penting yaiku kabeh programer sing nggarap proyek sing padha tetep nganggo pendekatan sing padha.

Yen sampeyan nggarap proyek sing kode duwe akeh array rong dimensi sing diinisialisasi, mula kabeh sing ana ing kono bakal adhedhasar initialization data sing cepet, yaiku sampeyan bakal duwe standar 'dhuwur x jembar'.

Yen sampeyan cukup beruntung kanggo nemokake dhewe ing proyek sing nglibatake akeh matematika lan nggarap koordinat (contone, mesin game), mula kode kasebut bakal nggunakake pendekatan 'jembaré x dhuwur'.


3. Carane susunan loro-dimensi disusun

Lan saiki sampeyan bakal sinau carane susunan rong dimensi bener diatur. Siap?

Array loro-dimensi sejatine susunan array!

Ing tembung liya, yen ing kasus array biasa, variabel array nyimpen referensi menyang wadhah sing nyimpen unsur array, banjur ing kasus array rong dimensi kahanan njeblug sethithik: variabel array rong dimensi nyimpen a referensi kanggo wadhah sing nyimpen referensi kanggo array siji-dimensi. Luwih becik ndeleng tumindak sapisan tinimbang nyoba nerangake kaping satus:

Carane susunan loro-dimensi disusun

Ing sisih kiwa , kita duwe variabel loro-dimensi-array, sing nyimpen referensi kanggo obyek loro-dimensi-array. Ingtengah kita duwe obyek array rong dimensi sing sel nyimpen array siji-dimensi, yaiku baris saka array rong dimensi. Lan ing sisih tengen , sampeyan bisa ndeleng papat larik siji-dimensi - baris larik loro-dimensi kita.

Iki carane array loro-dimensi bener bisa. Lan pendekatan iki menehi programmer Java sawetara kaluwihan:

Kaping pisanan , amarga 'wadhah wadhah' nyimpen referensi kanggo 'larik baris', kita bisa kanthi cepet lan gampang ngganti baris. Kanggo entuk 'wadhah wadhah', sampeyan mung kudu nemtokake siji indeks tinimbang loro. Tuladha:

int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];

Kode iki ngidini sampeyan ngganti baris:

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {5, 4, 3, 2, 1}
};

int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
Array loro-dimensi





matrix[0]nyimpen referensi kanggo baris pisanan.
Kita ngganti referensi.

Akibaté, matrixarray katon kaya iki:
{
  {5, 4, 3, 2, 1},
  {1, 2, 3, 4, 5}
};

Yen sampeyan ngrujuk menyang sel saka array loro-dimensi, nanging sampeyan mung nemtokake siji indeks sawise jeneng Uploaded, banjur sampeyan referring menyang wadhah sing sel nyimpen referensi kanggo array siji-dimensi biasa.