A snippet kuliah karo mentor minangka bagéan saka kursus Universitas Codegym. Ndaftar kanggo kursus lengkap.


"Salam, Amigo!"

"Hallo, Riska!"

"Sampeyan wis ngerti bab utawa loro bab array, lan sampeyan malah ngatur kanggo ngatasi sawetara tugas, Mugi. Nanging sampeyan ora ngerti kabeh. Contone, kene kasunyatan menarik liyane babagan array. Arrays ora mung siji-dimensi (linear). ). Dheweke uga bisa dadi rong dimensi."

"Um... Apa tegese?"

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

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

"Nalika jeneng minangka jeneng variabel array, jembaré minangka jembaré tabel (ing sel), lan dhuwur minangka dhuwur tabel. Deleng conto:

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

"Iki carane bakal katon ing memori:

Array loro-dimensi

"Oalah, kanggo array rong dimensi, sampeyan uga bisa nggunakake initialization cepet:

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

"Hmm ... saiki sing menarik. Yen kita mbayangno yen ing kurung batin pisanan makili siji unsur, sabanjure liyane ... Dadi array loro-dimensi kaya array saka array?"

"Kowe pancen murid sing pinter! Persis. Unsur pisanan yaiku array siji-dimensi {31, 28, 31}, sing nomer loro yaiku {30, 31, 30}, lan liya-liyane. Nanging kita bakal bali maneh ing wulangan iki. Nganti saiki, coba pikirake. array loro-dimensi minangka tabel karo larik lan kolom, mbentuk sel ing saben prapatan.

"Aku wis tak gambaran mental sing. Miturut cara, apa padha digunakake kanggo, iki array loro-dimensi?"

"Programmer mbutuhake susunan loro-dimensi cukup kerep. Yen sampeyan ndeleng kanthi teliti, meh kabeh game papan dileksanakake kanthi nggunakake array rong dimensi: catur, checkers, tic-tac-toe, perang laut, lsp.

perang segara

"Aku ngerti! Lapangan catur utawa perang laut pas karo susunan rong dimensi!"

"Ya, nanging sampeyan kudu nggunakake angka minangka koordinat sel. Ora 'pawn e2-e4', nanging 'pawn (5,2) -> (5,4)'. Bakal luwih gampang kanggo sampeyan minangka programmer. "

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

"Nggawe array loro-dimensi ngundakake dilema menarik. Nalika kita nggawe Uploaded nggunakake new int [2][5];, kita duwe tabel 'rong larik lan 5 kolom ' utawa iku 'loro kolom lan 5 larik'?"

"Ing tembung liyane, iku ora tanggung cetha apa kita pisanan nemtokake jembaré lan banjur 'dhuwur ... utawa kosok balene, pisanan dhuwur lan banjur jembaré?"

"Ya, iki dilema. Lan ora ana jawaban sing pasti."

"Apa sing kudu ditindakake?"

"Pisanan, iku penting kanggo ngerti carane array loro-dimensi kita bener disimpen ing memori . Alamiah, memori komputer ora bener duwe tabel ing: saben lokasi ing memori duwe alamat numerik urutan: 0, 1, 2, ... Kanggo kita, iki tabel 2 × 5, nanging ing memori mung 10 sel, ora luwih. Ora divisi dadi baris lan kolom."

"Aku ngerti, kepiye carane nemtokake dimensi sing luwih dhisik - jembar utawa dhuwure?"

"Ayo nimbang opsi pisanan. Jembar pisanan, banjur dhuwur. "Argumentasi sing ndhukung pendekatan iki yaiku: saben wong sinau matematika ing sekolah, lan 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 matematika."

"Iya ta? Lha yen ora bisa nglawan, ambane dhisik banjur dhuwure?"

"Ana argumen menarik kanggo 'dhuwur pisanan, banjur jembar' . Argumentasi iki asale saka initialization cepet saka array rong dimensi. Sawise kabeh, yen kita pengin initialize array kita, banjur kita nulis kode kaya iki: "

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

"Dadi apa sing ditindakake kanggo kita?"

"Apa sampeyan ngelingi 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 kanthi baris, banjur kita entuk tabel kanthi 2 baris lan 5 kolom."

"Saiki aku weruh. 2 iku dhuwur, lan 5 iku jembaré ... Dadi banjur pilihan apa kita kudu nggunakake?"

"Terserah sampeyan kanggo nemtokake sing luwih trep. 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, mesthine kabeh bakal adhedhasar initialization data sing cepet, yaiku sampeyan bakal duwe standar 'dhuwur x jembar'.

"Yen sampeyan nemokake dhewe ing proyek sing nglibatake akeh matematika lan nggarap koordinat (umpamane, mesin game), mula kode kasebut bakal nggunakake pendekatan 'lebar x dhuwur'.

Carane susunan loro-dimensi disusun

"Saiki, apa sampeyan ngelingi fitur khusus saka array rong dimensi sing sampeyan weruh ing awal pelajaran?"

"Ya! Iku sing loro-dimensi array sing bener array saka array!"

"Pancen bener. "Ing tembung liyane, yen ing kasus array biasa, variabel array nyimpen referensi menyang wadhah sing nyimpen unsur array, banjur ing kasus array rong dimensi, kahanan kasebut rada mbledhos: rong dimensi. variabel -array nyimpen referensi kanggo wadhah sing nyimpen referensi kanggo array siji-dimensi. Luwih becik ndeleng tumindak sepisan tinimbang nyoba nerangake kaping satus:"

Carane susunan loro-dimensi disusun

"Ing sisih kiwa , kita duwe variabel array rong dimensi, sing nyimpen referensi menyang obyek array rong dimensi. Ing tengah ana obyek array rong dimensi sing sel nyimpen array siji dimensi, yaiku baris saka array loro-dimensi. Lan ing sisih tengen , sampeyan bisa ndeleng papat array siji-dimensi — baris saka array loro-dimensi kita. Iki carane array loro-dimensi bener bisa digunakake."

"Fantastic! Nanging apa sing menehi kita?"

"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. Conto:

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

"Deleng kode ing ngisor iki. Kita bisa nggunakake kanggo 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}
};

"Get it. Kerjane kaya ngganti loro item biasa."

"Inggih, yen sampeyan ngrujuk menyang sel saka array loro-dimensi, nanging sampeyan mung nemtokake siji indeks sawise jeneng Uploaded, banjur sampeyan referring menyang wadhah wadhah kang sel nyimpen referensi kanggo biasa siji- susunan dimensi."

"Kabeh katon logis lan jelas. Matur nuwun kanggo kuliahe, Rishi!"

"Sampeyan olèh. Nglakoni kanthi wicaksana."