Programmering

Array of arrays

Spørsmål: Hvordan bruker jeg en rekke matriser?

EN:

String s = new String ("Hello, World"); // s er en strengreferanse, som refererer til et // strengobjekt med verdien "Hello, World." s = ny streng ("Guten Tag, Welt"); // Den samme strengreferansen s refererer nå // til et annet strengobjekt; det vil si // en enkelt referanse har referert til to // forskjellige objekter (fortløpende). // (Legg merke til at vi nå har et strengobjekt // med verdien "Hei, verden", som ikke har // referanser; derfor er dette objektet kvalifisert // for å bli søppeloppsamlet) Streng t; // t er en strengreferanse med en nullverdi // (refererer ikke til noe objekt). // Hvis du prøver å bruke t på dette punktet, f.eks. ved // å si int len ​​= t.length; du får en // NullPointerException (skal hete // NullReferenceException). t = s; // Stringreferansen t viser nå til det samme // objektet det refereres til av strengreferansen s, // nemlig et strengobjekt med verdien "Guten Tag, Welt". // Så her har vi to // referanser til et enkelt objekt (samtidig). 

Arrays i Java er objekter i seg selv, enten de inneholder primitiver (ints, røyes, boolsks, og så videre) eller inneholder andre gjenstander. Dette betyr at arrays blir referert til som ethvert annet objekt, med tillegg av [] aggregering / dereference semantikk. Her er et eksempel:

String [] sa; // sa er en nullreferanse // prøver å få tilgang til sa.length forårsaker et NullPointerException. sa = ny streng [2]; // sa er ikke lenger en nullreferanse, den refererer til et bestemt // objekt som er en matrise med to null strengreferanser. // sa.length er nå lik 2 // (sa [0] og sa [1] er de to null strengreferansene). sa [0] = "Hei, verden"; sa [1] = "Guten Tag, Welt"; // Nå refererer sa til en matrise med to ikke-null strengreferanser. sa = ny streng [1]; // sa.length er lik 1 // Den samme referansen sa refererer nå til en annen // (og kortere) matrise. // sa [0] er en null strengreferanse // prøver å få tilgang til sa [1] forårsaker // ArrayIndexOutOfBoundsException. sa [0] = "Hei, verden"; // sa [0] er nå ikke-null. 

Spørsmålet ditt om matriser kan besvares ved å vurdere det

String [] [] saa; saa [0] [0] = "Hjelp"; 

vil føre til en NullPointerException, fordi saa er en null referanse - det vil si saa refererer ikke til noe objekt. For å tilordne en verdi til det første elementet i den første matrisen, saa må referere til en matrise med lengden større enn null, og saa [0] må referere til en ikke-streng strengmatrise hvis lengde også er større enn null. Så man kan begynne med å si:

String [] [] saa; // saa er en nullreferanse til en rekke strengmatriser // Å prøve saa.length fører allerede til en NullPointerException, // som å prøve saa [0] gjør. saa = ny streng [1] []; // saa refererer nå til en matrise med 1 nullreferanse til en streng []. // saa.lengde er lik 1. // saa [0] er null. saa [0] = ny streng [2]; // saa refererer nå til en matrise med 1 ikke-null-referanse // til en streng [] med lengde 2. // saa-lengde er fortsatt lik 1. // saa [0]. lengde er lik 2 (men saa [0] [0] og // saa [0] [1] er begge null). saa [0] [0] = "Hei, verden"; saa [0] [1] = "Guten Tag, Welt"; // Nå er saa [0] [0] og saa [0] [1] begge ikke-null. 

Legg merke til at du ikke kan referere til saa [0] [0] før saa [0] er ikke null, og du kan ikke lage saa [0] ikke til du lager saa ikke null. I utgangspunktet må du bygge opp matrisen din trinnvis.

Det er en brukervennlig stenografi for initialisering av matereferanser:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // dette skaper et String [] [] -objekt som det som ble opprettet // over, og tildeler saa til referer til det objektet. // Det hvite rommet er ment å understreke at // opprettet objekt er en matrise med én streng [] som // inneholder to strenger. 

Ved å bruke denne stenografien kan eksemplet vårt riktig skrives som:

String [] [] saa = {{{"" Hjelp "}}}; 

Dette gjør imidlertid saa refererer til en streng for hver streng. Merk at syntaksen ovenfor bare fungerer når du initialiserer en matrisereferanse (initialisering er det spesielle tilfellet for tildeling på erklæringstidspunktet). Den mer generelle måten å lage en ny matrise og tildele den til en ny eller eksisterende matereferanse ser slik ut (i tilfelle en eksisterende referanse):

saa = ny streng [] [] {// merk den tomme [] [] - kompilatoren beregner // størrelsen (tom [] [] kreves). {{"Hei"}, {"Verden"}} // dette er saa [0], // merk kommaet som skiller saa [0] og saa [1] {{"Guten Tag"}, {"Welt"} } // dette er saa [1]}; // nå saa.length = 2, og saa [0] og saa [1] har også hver lengde 2 
Random Walk Computing er den største Java / CORBA-konsulentbutikken i New York, med fokus på løsninger for finansforetaket. Random Walk-konsulenter er kjent for sin ledende Java-ekspertise, og publiserer og snakker om Java i noen av de mest respekterte forumene i verden.

Denne historien, "Array of arrays" ble opprinnelig utgitt av JavaWorld.

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