Flerdimensionell array i Java


I det här kapitlet så kommer vi lära oss om flerdimensionell (även kallat multidimensionell) array i Java som består av två dimensioner, vilket kan tolkas som ett rutfält, eller som tre dimensioner som är likt ett block. Slutligen så går det att ha fler än tre dimensioner, men det är svårt att illustrera. 

Vad är en flerdimensionell array i Java?

I Java är det möjligt att skapa en array i flera dimensioner. Vi betraktade en Endimensionella Array som listor med värden. På samma sätt kan vi se en Flerdimensionell Array i två dimensioner som ett rutnät (matriser med rader och kolumner) och för en array med tre dimensioner som en block/kub. Det medför då att vi får fler lagringsplatser att arbeta med och det brukar beskrivas som en array av en array, eller fält av fält, vilket även medför att raderna kan ha olika längd.

Innan vi fortsätter och läser vidare om den flerdimensionell array, se till att du känner till och har koll array i java.

På liknande sätt som för en endimensionella array så ska vi nu se två olika tillvägagångssätt (som vi har valt att kalla Tillvägagångssätt 1 och Tillvägagångssätt 2) för att skapa en flerdimensionell array i Java.

Varför använda en flerdimensionell array i Java?

I grund och botten används flerdimensionell array om du vill placera en array i en array. Det kan låta komplicerat, men tänk dig att du vill spara ned data i tabellformat, till exempel, testresultatet för eleverna i en klass. En Flerdimensionella array används för att lagra information i en matrisform, t.ex. ett schema kan inte realiseras som en endimensionell array.

Hur fungerar en tvådimensionell array i Java?

  • Tänk på den tvådimensionella array som en matris. Den skulle kunna betraktas som ett rutnät med siffror, ordnade i rader och kolumner, likt det för en bingobräda eller ett shackbräde.
  • Bilden nedan visar hur vi kan tänka oss en tvådimensionell array
  • Den består av tre kolumner och fyra rader vilket ger totalt tolv element.

Hur fungerar en tredimensionell array i Java?

  • Tänk på den tredimensionella array som en kub eller ett block.
  • Bilden nedan visar hur en tredimensionell array i Java skulle kunna illustreras. Array nedan består av totalt 36 element ( 4 * 3 * 3 = 36)

Skapa en flerdimensionell array i Java: Tillvägagångssätt 1

På liknande sätt som för en endimensionella array så skapar vi tvådimensionell och tredimensionell array enligt

Tvådimensionell array

datatyp[][] namn = new datatyp[antal element (rader)][antal element (kolumner)];

Tredimensionell array

Om vi tänker oss ett koordinatsystem med x-, y- och z-led så skapar vi en tredimensionell array enligt.

datatyp[][][] namn = new datatyp[antal element x-led][antal element y-led][antal element z-led];

Om vi tar det stegvis,

  • Först anger man vilken datatyp array innehåller, följt av två hakparenteser [ ][ ] eller tre hakparenteser [ ][ ][ ].
  • Sedan ger man ett namn på Array följt av “= new datatyp”. Datatypen måste vara densamma vid båda tillfällena.
  • Avslutningsvis anger man antal element som Array ska innehålla inom hakparentesen för raderna respektive kolumnerna, följt av semikolon.

Exempel: Deklarera en tvådimensionell array i Java med tillvägagångssätt 1

Om vi skapar en tvådimensionell array (en tom array) som har 4 rader och 3 kolumner. Notera att det är två hakparenteser, [ ][ ], eftersom det är en tvådimensionell array vi ska deklarera.

int [][] twoAr = new int [4][3];

Vi kan sedan illustrera den enligt bilden nedan, och för att göra det tydligare har vi färgkodat radindex respektive kolumnindex. Viktigt att komma ihåg att index börjar på noll.

Vill vi sedan redigera eller använda ett element i matrisen så gör vi det enkelt på samma sätt som för en endimensionell array. Vi kan börja med att sätta in tre värden i vår tvådimensionella array.

twoAr[0][2] = 15; 
twoAr[2][1] = 7;
twoAr[3][0] = 22;

Vidare, om vi sedan vill använda det vi har stoppat in i vår array så skriver vi enkelt

int sum = twoAr[0][2] + twoAr[2][1]; 
int sumAll = twoAr[0][2] + twoAr[2][1] + twoAr[3][0];
int multi = twoAr[0][2] * twoAr[2][1];

System.out.println(sum);
System.out.println(sumAll);
System.out.println(multi);

Och får då resultatet

22
44
105

Söka igenom en tvådimensionell array

Vidare, om vi skulle till exempel leta igenom tvådimensionell Array så behöver vi använda två for-loopar, på liknande sätt om vi skulle haft en tredimensionell array så hade vi behövt tre for-loopar, alltså en for-loop per dimension kan man säga. Det här kan vara lite knepigt att förstå till en början så vi tar det lugnt och metodiskt.

Vi använder samma tvådimensionella array från föregående exempel där vi sätter in ett par värden.

int [][] twoAr = new int [4][3];
twoAr[0][2] = 15;
twoAr[2][1] = 7;
twoAr[2][2] = 46;
twoAr[3][0] = 22;
twoAr[3][1] = 33;

Sedan kommer vi använda oss av de två for-looparna och sedan funktionen .length för att ta längden på raden respektive kolumnen

for (int row = 0; row < twoAr.length; row++){
     for (int column = 0; column < twoAr[row].length; column++){

     }
}

Okej, vi tar det lugnt och metodiskt. Den första for-loopen använder vi för att gå igenom varje rad. Vi kommer då börja på rad 0 eftersom index för en Array i java alltid börja på 0.

for (int row = 0; row < twoAr.length; row++){

Sedan, så lägger vi till den for-loop som kollar varje kolumn i den raden.

for (int column = 0; column < twoAr[row].length; column++){

Det som brukar vara lite knepigt att förstå är twoAr[row].length kommandot, men det den gör är att för varje rad så tar det längden på den raden. I vårt fall så är alla rader lika långa men det en tvådimensionell array kan ha olika långa rader. Vidare, notera att variabeln row är något vi har skapat i for-loopen.

Hitta största värdet tvådimensionell array i Java

Om vi nu skulle vilja lägga till en funktion i vårt program, säg att vi vill hitta det största värdet i den tvådimensionella array från föregående exempel och skriva ut värdet plus index vars det hittades

int [][] twoAr = new int [4][3];
twoAr[0][2] = 15;
twoAr[2][1] = 7;
twoAr[2][2] = 46;
twoAr[3][0] = 22;
twoAr[3][1] = 33;

Så gör vi det enkelt med två for-loopar och en if-sats.

int maxVar = 0;
int rowIndex = 0;
int columnIndex = 0;

for (int row = 0; row < twoAr.length; row++){
    for (int column = 0; column < twoAr[row].length; column++){

        if (twoAr[row][column] > maxVar){
            maxVar = twoAr[row][column];
            rowIndex = row;
            columnIndex = column;
            }
        }
}

Avslutningsvis så skrivet vi ut vårt resultat

System.out.println("Value: " + maxVar + " at index " + rowIndex + ":" + columnIndex);

och får svaret:

Value: 46 at index 2:2

Skapa en flerdimensionell array i Java: Tillvägagångssätt 2

Vi kan också skapa flerdimensionell array med metod 2 som vi såg för endimensionella array. Där vi helt enkelt initierar värden direkt när vi skapar array.

Vi tar ett kort exempel för att visa

int [][] twoField2 = {{2, 3},
                      {34, 56},
                      {44, 654, 43},
                      {2, 3, 23, 44}};

Om vi sedan illustrerar det med en enkel bild

Viktigt att notera att vi inte har skapat en 4 x 4 matris utan att raderna har olika många kolumner. Till exempel om vi skulle vilja lägga till ett element på index [ 1 ][ 2 ] och skriver

twoField2[1][2] = 15;

så kommer vi att få OutOfBoundsException. Vi behöver i såna fall skapa en ny array för att kunna lägga till fler index. Som vi ska i nästa område med listor så är listor mer flexibla i avseende att lägga till och ta bort platser (index).  

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!