Programavimas

Masyvų masyvas

Klausimas: Kaip naudoti masyvų masyvą?

A:

String s = nauja eilutė („Labas, pasauli“); // s yra String nuoroda, nurodanti // String objektą, kurio vertė „Sveikas, pasauli“. s = nauja eilutė („Guten Tag, Welt“); // Tos pačios eilutės nuorodos s dabar nurodo // kitą String objektą; tai yra, // viena nuoroda nurodė du // skirtingus objektus (iš eilės). // (Atkreipkite dėmesį, kad dabar turime String objektą //, kurio vertė „Labas, pasauli“, kuris neturi // nuorodų; todėl šis objektas yra tinkamas // būti renkamas šiukšles) String t; // t yra eilutės nuoroda su nuline verte // (nenurodo jokio objekto). // Jei bandysite naudoti t šiuo metu, pvz. // sakydamas int len ​​= t.length; gausite // NullPointerException (turėtų būti vadinamas // NullReferenceException). t = s; // String nuoroda t dabar nurodo tą patį // objektą, nurodytą String reference s, // būtent String objektą, kurio vertė „Guten Tag, Welt“. // Taigi čia mes turime dvi // nuorodas į vieną objektą (tuo pačiu metu). 

Masyvai „Java“ yra savarankiški objektai, nesvarbu, ar juose yra primityvų (tarpts, chars, loginiss ir t. t.) arba jose gali būti kitų objektų. Tai reiškia, kad masyvai vadinami kaip bet kuris kitas objektas, pridedant [] agregavimo / išvedimo semantika. Štai pavyzdys:

Stygos [] sa; // sa yra nulinė nuoroda // bandymas pasiekti sa.length sukelia „NullPointerException“. sa = nauja eilutė [2]; // sa nebėra nulinė nuoroda, ji nurodo konkretų // objektą, kuris yra dviejų nulinių String nuorodų masyvas. // sa.length dabar lygus 2 // (sa [0] ir sa [1] yra dvi nulinės eilutės nuorodos). sa [0] = "Sveiki, pasauli"; sa [1] = "Guten Tag, Welt"; // Dabar sa nurodo dviejų nenulinių eilučių nuorodų masyvą. sa = nauja eilutė [1]; // sa.length lygus 1 // Ta pati nuoroda sa dabar nurodo skirtingą // (ir trumpesnę) masyvą. // sa [0] yra nulinė eilutės nuoroda // bandymas pasiekti sa [1] sukelia // ArrayIndexOutOfBoundsException. sa [0] = "Sveiki, pasauli"; // sa [0] dabar nėra nulis. 

Į jūsų klausimą apie masyvus galima atsakyti tai apsvarsčius

Stygos [] [] saa; saa [0] [0] = „Pagalba“; 

sukels a „NullPointerException“, nes saa yra nulinė nuoroda - tai yra saa nenurodo jokio objekto. Norėdami priskirti vertę pirmajam pirmojo masyvo elementui, saa turi nurodyti masyvą, kurio ilgis yra didesnis nei nulis, ir saa [0] turi nurodyti nenulinį eilutės masyvą, kurio ilgis taip pat yra didesnis nei nulis. Taigi, galima pradėti sakyti:

Stygos [] [] saa; // saa yra nulinė nuoroda į styginių masyvų masyvą // Bandymas saa.length jau sukelia „NullPointerException“, // panašiai kaip bandant saa [0]. saa = nauja eilutė [1] []; // dabar dabar reiškia 1 nulinės nuorodos į eilutę masyvą []. // saa.length yra lygus 1. // saa [0] yra nulis. saa [0] = nauja eilutė [2]; // dabar dabar reiškia 1 ne nulinės nuorodos masyvą // į 2 ilgio eilutę []. // saa.length vis tiek lygus 1. // saa [0] .length yra lygus 2 (bet saa [0] [0] ir // saa [0] [1] yra niekiniai). saa [0] [0] = "Sveiki, pasauli"; saa [0] [1] = "Guten Tag, Welt"; // Dabar saa [0] [0] ir saa [0] [1] abu nėra nuliniai. 

Atkreipkite dėmesį, kad negalite nurodyti gali [0] [0] iki saa [0] nėra nieko, ir jūs negalite padaryti saa [0] nonnull, kol padarysite saa nonnull. Iš esmės jūs turite kaupti savo masyvų masyvą palaipsniui.

Masyvo nuorodoms inicializuoti yra lengvai naudojamas trumpinis:

String [] [] saa = {{{"Sveikas, pasauli}, {" Guten Tag, Welt "}}}}; // tai sukuria String [] [] objektą, tokį, koks buvo sukurtas anksčiau //, ir priskiria nurodykite tą objektą. // Tarpai skirti pabrėžti, kad sukurtas // objektas yra vienos eilutės masyvas [], kuriame // yra dvi eilutės. 

Naudojant šį trumpinį, mūsų pavyzdį būtų galima teisingai parašyti taip:

Stygos [] [] saa = {{{"" Pagalba "}}}; 

Tačiau tai daro saa nurodyti po vieną eilutės masyvą. Atkreipkite dėmesį, kad aukščiau pateikta sintaksė veikia tik inicijuojant masyvo nuorodą (inicijavimas yra ypatingas priskyrimo atvejis deklaravimo metu). Bendresnis būdas sukurti naują masyvą ir priskirti jį naujai ar esamai masyvo nuorodai atrodo taip (esamos nuorodos atveju):

saa = new String [] [] {// atkreipkite dėmesį į tuščią [] [] - kompiliatorius pavaizduoja // dydį (būtina tuščia [] []). {{"Sveiki"}, {"Pasaulis"}} // tai yra saa [0], // atkreipkite dėmesį į kablelį, skiriantį saa [0] ir saa [1] {{"Guten Tag"}, {"Welt"} } // tai yra [1]}; // dabar saa.length = 2, ir saa [0] ir saa [1] taip pat kiekvienas turi 2 ilgį 
„Random Walk Computing“ yra didžiausia „Java / CORBA“ konsultacinė parduotuvė Niujorke, orientuota į finansų įmonės sprendimus. „Random Walk“ konsultantai, žinomi dėl savo pažangiausios „Java“ patirties, skelbia ir kalba apie „Java“ kai kuriuose labiausiai gerbiamuose pasaulio forumuose.

Šią istoriją „Masyvų masyvas“ iš pradžių paskelbė „JavaWorld“.

$config[zx-auto] not found$config[zx-overlay] not found