"Hei, min aller smarteste student!"
"Hei, Rishi!"
"Slenger du etter en ny diskusjon om arrays? Vel, i dag har vi en for deg! I dag skal jeg fortelle deg om taggete og flerdimensjonale arrays."
"Høres blodtørstig og skremmende ut."
"Ikke bekymre deg, en ekte programmerer kan alltid håndtere en matrise, selv når den blotter tenner. Spøker til side, en matrises ujevnhet gjenspeiler evnen til ikke bare å bytte rader i en todimensjonal matrise, men også å konstruere en matrise men det må være.
"La oss si at du vil at den første raden i en todimensjonal matrise skal ha en lengde på 10, og den andre skal være 50."
"Kan du virkelig gjøre det?"
"Absolutt! Først lager vi en "container of containers" - dette er den første matrisen som vil lagre referanser til matriser med rader. Slik gjøres det:
int[][] name = new int[height][];
"Du utelater ganske enkelt den andre dimensjonen , og Java-maskinen lager en container med containere. Dette er hva som vil være i minnet etter å ha kjørt denne koden:
"Og vel, du vet allerede hvordan du lager endimensjonale arrays 🙂
Slik vil den resulterende koden se ut:
|
Todimensjonal matrise Den nullte raden er en matrise av 10 elementer Den første raden er en matrise med 50 elementer |
"Vi har nettopp laget en såkalt "jagged" array. Kantene er grove og uregelmessige.
"Og hvis vi nå ønsker å vise alle elementene i denne matrisen på skjermen, så vil matrisens matrise length
komme godt med: tross alt er lengdene på matrisens rader forskjellige.
"Kan du forresten fortelle meg hvordan jeg finner lengden på en 'container med containere' i vårt eksempel? Det er også et array-objekt, som betyr at det har en lengde."
"Sannsynligvis matrix.length
?"
"Helt riktig! Og for matrisene som danner radene, ville vi brukt matrix[0].length
for den nullte raden."
"Og for det første betyr det at vi ville bruke matrix[1].length
?"
"Helt riktig. I det første tilfellet vil utførelse av kommandoen gi 10, og i det andre tilfellet vil resultatet være 50.
Arbeide med en todimensjonal matrise
"La oss nå prøve å vise en todimensjonal matrise:
|
Lag en matrise Fyll matrisen med verdier Ytre sløyfe som itererer over radene i matrisen. Indre løkke som itererer over cellene i en enkelt rad. |
"Som du kan se, trenger vi to nestede løkker. Den første kaller vi ytre, og den andre - indre .
"I den ytre sløyfen ( i
variabelen) går vi sekvensielt gjennom alle radene (matrisene) som utgjør vår todimensjonale matrise. Hver verdi av i
tilsvarer en rad med den indeksen.
"I den indre løkken ( j
variabelen) itererer vi over alle cellene i radene. Takket være den indre løkken vil en rad, som består av verdiene til en endimensjonal matrise, vises på skjermen.
"Dette er hva som vises:
Én linje i matrisen behandles | 1 2 3 4 5 6 |
To linjer i matrisen behandles | 1 2 3 4 5 6 |
Tre linjer i matrisen behandles | 1 2 3 4 5 6 |
Flerdimensjonale arrays
"Amigo! Gjettet du at hvis det er todimensjonale arrays, så kan det også være tredimensjonale?
"Jeg tenkte bare på det, men var flau over å spørre.
"Ja, du kan lage en tredimensjonal matrise, og generelt sett en matrise av alle dimensjoner. Slike matriser kalles "flerdimensjonale". Bare for moro skyld, la oss lage en flerdimensjonal matrise som har 4 dimensjoner.
int[][][][] matrix = new int[2][3][4][5];
"Det ser ikke veldig vanskelig ut!"
"Du har ikke prøvd å lage en manuelt ennå! Her kan du glede deg over dette:
int[][][][] matrix;
matrix = new int[2][][][]; // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
matrix[i] = new int[3][][]; // Create a 3-element array of references to references
for (j = 0; j < matrix[i].length; j++)
{
matrix[i][j] = new int[4][]; // Create a 4-element array of references
for (k = 0; k < matrix[i][j].length; k++)
matrix[i][j][k] = new int[5]; // Create 5-element arrays of integers
}
}
"Og det er bare å lage en matrise! Da må du også jobbe med den på en eller annen måte."
"Jeg tar tilbake det jeg sa. Det er ikke så lett å jobbe med dem. Men det er mulig."
"Siden det er mulig, her er en bonusoppgave. Skriv kode som viser alle verdiene i en tredimensjonal matrise. Du vet nok til å gjøre dette. Det viktigste er å være tålmodig og oppmerksom. Eller kanskje være ressurssterk (det er en hemmelig bit av kunnskap som vil hjelpe deg å løse denne oppgaven på en enkelt linje). Men uansett hvordan du løser den, løs den."
"Takk, Rishi. Jeg skal prøve."
GO TO FULL VERSION