Ohjelmointi

Matriisiryhmä

K: Kuinka voin käyttää matriisiryhmää?

A:

Merkkijono s = uusi merkkijono ("Hei, maailma"); // s on merkkijono-viite, joka viittaa // merkkijono-objektiin, jonka arvo on "Hei, maailma". s = uusi merkkijono ("Guten Tag, Welt"); // Samat merkkijonoviitteet s viittaavat nyt // toiseen String-objektiin; eli // yksi viite on viitannut kahteen // eri objektiin (peräkkäin). // (Huomaa, että meillä on nyt String-objekti //, jonka arvo on "Hello, World", jolla ei ole // -viitteitä; siksi tämä objekti on kelvollinen // kerättäväksi roskiin) String t; // t on merkkijonoviite, jonka arvo on nolla // (ei viittaa mihinkään objektiin). // Jos yrität käyttää t tässä vaiheessa, esim. sanomalla int int = t.pituus; saat // NullPointerException (pitäisi kutsua // NullReferenceException). t = s; // String-viite t viittaa nyt samaan //-objektiin, johon String-viitteet s viittaavat, // nimittäin String-objekti, jonka arvo on "Guten Tag, Welt". // Tässä siis meillä on kaksi // viittausta yhteen objektiin (samanaikaisesti). 

Java-matriisit ovat omia esineitä, sisältäisivätkö ne primitiivit (ints, hiiltyäs, looginenja niin edelleen) tai sisältävät muita esineitä. Tämä tarkoittaa, että matriiseihin viitataan kuten kaikkiin muihin kohteisiin, lisäämällä [] aggregaation / poikkeaman semantiikka. Tässä on esimerkki:

Merkkijono [] sa; // sa on nollaviite // sa.length-yhteyden käyttäminen aiheuttaa NullPointerExceptionin. sa = uusi merkkijono [2]; // sa ei ole enää nollaviite, se viittaa tiettyyn // objektiin, joka on kahden nollan merkkijonoviitteen taulukko. // sa.pituus on nyt yhtä suuri kuin 2 // (sa [0] ja sa [1] ovat kaksi nollan merkkijonoviittausta). sa [0] = "Hei, maailma"; sa [1] = "Guten Tag, Welt"; // Nyt sa viittaa kahden ei-nollan merkkijonoviitteen ryhmään. sa = uusi merkkijono [1]; // sa.pituus on 1 // Sama viite sa viittaa nyt eri // (ja lyhyempään) matriisiin. // sa [0] on tyhjä merkkijonoviite // sa [1] -palvelun käyttö aiheuttaa // ArrayIndexOutOfBoundsException. sa [0] = "Hei, maailma"; // sa [0] ei ole nyt nolla. 

Matriiseja koskevaan kysymykseesi voidaan vastata ottamalla huomioon tämä

Merkkijono [] [] saa; saa [0] [0] = "Apua"; 

aiheuttaa a NullPointerException, koska saa on tyhjä viite - eli saa ei viittaa mihinkään esineeseen. Jos haluat määrittää arvon ensimmäisen taulukon ensimmäiselle elementille, saa on viitattava ryhmään, jonka pituus on suurempi kuin nolla, ja saa [0] on viitattava nollull-merkkijonoryhmään, jonka pituus on myös suurempi kuin nolla. Joten voisi aloittaa sanomalla:

Merkkijono [] [] saa; // saa on nolla viittaus merkkijonotaulukkoihin // saa.lengthin kokeilu aiheuttaa jo NullPointerExceptionin, // kuten saa [0]. saa = uusi merkkijono [1] []; // saa nyt viittaa matriisiin, jossa on 1 nolla viittaus merkkijonoon []. // saa.length on yhtä kuin 1. // saa [0] on nolla. saa [0] = uusi merkkijono [2]; // saa nyt viittaa matriisiin, jossa on yksi ei-nolla-viite // merkkijonoon [], jonka pituus on 2. // saa.length on edelleen yhtä suuri kuin 1. // saa [0] .pituus on yhtä suuri kuin 2 (mutta saa [0] [0] ja // saa [0] [1] ovat molemmat nollia). saa [0] [0] = "Hei, maailma"; saa [0] [1] = "Guten Tag, Welt"; // Nyt saa [0] [0] ja saa [0] [1] eivät ole nollia. 

Huomaa, että et voi viitata siihen saa [0] [0] siihen asti kun saa [0] ei ole mitään, etkä voi tehdä saa [0] ei ole, kunnes teet saa ei ole mitään. Pohjimmiltaan sinun on rakennettava matriisiryhmäsi asteittain.

Taulukon viitteiden alustamiseksi on helppokäyttöinen lyhenne:

String [] [] saa = {{{"Hei, maailma}, {" Guten Tag, Welt "}}}}; // tämä luo String [] [] -objektin, kuten yllä luotu //, ja antaa saa-osoitteen viittaa kyseiseen objektiin. // Välilyönnin on tarkoitus korostaa, että luotu // -objekti on yhden merkkijonoryhmä [], joka // sisältää kaksi merkkijonoa. 

Tämän lyhenteen avulla esimerkkimme voitaisiin kirjoittaa oikein:

Merkkijono [] [] saa = {{{"" Ohje "}}}; 

Tämä kuitenkin tekee saa viittaa yksi kerrallaan merkkijonoryhmään. Huomaa, että yllä oleva syntakse toimii vain matriisiviittausta alustettaessa (alustaminen on määrityksen erityistapaus ilmoituksen tekohetkellä). Yleisempi tapa luoda uusi taulukko ja määrittää se uudelle tai olemassa olevalle taulukon viitteelle näyttää tältä (olemassa olevan viitteen tapauksessa):

saa = new String [] [] {// merkitse tyhjä [] [] - kääntäjä kuvaa // koon (tyhjä [] [] vaaditaan). {{"Hei"}, {"Maailma"}} // tämä on saa [0], // huomaa pilkku, joka erottaa saa [0] ja saa [1] {{"Guten Tag"}, {"Welt"} } // tämä on saa [1]}; // nyt saa.length = 2, ja saa [0] ja saa [1] molemmilla on myös pituus 2 
Random Walk Computing on New Yorkin suurin Java / CORBA-konsultointiputiikki, joka keskittyy rahoitusyrityksen ratkaisuihin. Random Walk -konsultit, jotka tunnetaan huipputeknisestä Java-asiantuntemuksestaan, julkaisevat Java: ta ja puhuvat siitä joissakin maailman arvostetuimmista foorumeista.

Tämän tarinan "Array of arrays" julkaisi alun perin JavaWorld.