Enhanced for-loop i Java: Loopa igenom en Array


Nyckelord: enhanced for-loop, array, for-loop

Den här sidan kommer gå igenom den så kallade enhanced for-loop i Java som är ett hjälpmedel för att loopa igenom alla element i en array. Vi börjar med att reda vad en enhanced for-loop är för något, för att sedan gå vidare och se skillnader mot den vanliga for-loopen som vi lärde oss tidigare. Avslutningsvis ska vi ta ett par exempel på hur man kan använda en enhanced for-loop för att arbeta med en array.

Vad är en enhanced for-loop i Java?

Enhanced for-loop, eller på svenska, förstärkt eller förenklad for-loop, är ett hjälpmedel för att enkelt och snabbt gå igenom alla element i en array. Den har liknande egenskaper som den “vanliga” for-loopen som vi lärde oss om i kapitlet om loopar, med skillnaden att en enhanced for-loop går igenom elementvis, istället för ett specifikt antal gånger.

Hur skapar man en enhanced for-loop i Java?

För att skapa en enhanced for-loop använder vi oss av liknande syntax som vi såg för for-loopen.

  • Först anger vi det reserverade ordet for och sedan en parentesen, ( ).
  • Innanför parentesen anger vi vilken datatyp den array vi arbetar med har, följt av ett variabelnamn. Denna variabeln är endast definierad inuti loopen.
  • Slutligen anger man ett kolon, : , följt av den array man vill iterera igenom.

Innanför måsvingarna skriver vi sedan de operationer vi vill utföra. I varje iteration, kommer variabeln vi har skapat för loopen att innehålla värdet på som finns på varje index i den array vi arbetar med.

I Java är det möjligt att iterera, gå igenom alla element i en array med hjälp av en for-loop.

Syntax: Enhanced for-loop i Java

for (datatyp variabelnamn : array) { 

      // Operation / Flera operationer ...  
}

Notera att vi använder kolon, : , mellan den variabel vi skapar och den array vi vill arbeta med.

Syntax: For-loop i Java för att gå igenom en array

Om vi istället vill använda den vanliga for-loopen för att utföra samma sak som med en enhanced for-loop så använder vi syntax

for (int i = 0; i < arrayNamn.length; i = i + 1) {

      // Operation / Flera operationer ... 
}

Det vi gör är att:

  • Initialvärdet, int i = 0, sätts till noll för att index i en array alltid börjar på 0.
  • För villkoret så använder vi den inbyggda funktionen length som ger oss längden av en array, som vi använder för att ställa upp villkoret att så länge i är mindre än längden på vår array arrayNamn så ska loopen utföras.
  • Slutligen så ökar vi initialvärdet med ett för varje steg för att gå igenom alla element i vår array.

Vad är det för skillnad mellan en enhanced for-loop och en for-loop?

Det finns ett par skillnader mellan enhanced for-loop och den vi kallar för den “vanliga” for-loopen som vi bör känna till.

  • En enhanced for-loop utförs i följd, med andra ord, det finns ingen räknare som det finns i den vanliga for-loopen. I den vanliga for-loopen kan du ändra steget till att räkna till exempel i = i + 2, dvs att loopa varannat element i en array. Detta är inte möjligt i en enhanced for-loop.
  • Enhanced for-loop kan endast iterera (gå i genom) arrayen i inkrementell ordning, det vill säga den ökar stegvis. Vi kan alltså inte konfigurera den att gå i baklänges genom en array. I den vanliga for-loopen kan vi konfigurera räknaren baklänges med hjälp av, i- – , men en enhanced for-loop går alltid igenom en array i den ordning som elementen ligger i.
  • Enhanced for-loop har inte tillgång till arrayens index, vilket innebär att du inte kan ersätta elementet med indexet. Den vanliga for-loopen har däremot tillgång till index, vilket då möjliggör att du kan byta ut något element i arrayen.

Det var ett par skillnader som är bra att känna till. För att summera, om du behöver mer kontroll, välj den vanliga for-loopen. Om du däremot inte behöver den nivå av kontroll, välj det bekvämligare alternativet enhanced for-loop.

Exempel: Enhanced for-loop i Java

Låt oss ta ett par exempel som visar hur vi kan använda en enhanced for-loop för att arbeta med en array. Vi kommer även gå igenom exempel där vi utför samma uppgift med hjälp av en enhanced for-loop och den vanliga for-loopen.

Exempel 1: Enhanced for-loop för att skriva ut värden i en array

Vi börjar med ett enkelt exempel där vi loopar igenom en array som innehåller fem namn.

String[] names = {"Jonas", "Lisa", "Ahmed", "Elin", "Lars"};

Vi har alltså en array som heter names som innehåller element av typen String, alltså textsträngar.

Enhanced for-loop Java
Figur 1: Exempel på array i Java

Nu kan vi enkelt loopa igenom alla element i arrayen:

for (String val : names) { 
    System.out.println("Hej " + val); 
}

Vilket i detta fall ger utskriften:

Hej Jonas
Hej Lisa
Hej Ahmed
Hej Elin
Hej Lars

Variabeln val ändras alltså vid varje iteration i samma ordning som de är placerade i arrayen. Vill du testa exemplet ovan, klicka på knappen nedanför för att testa den online

Exempel 2: Summera alla element i en array

I detta exempel ska vi testa att summera alla heltal i en array. Först skapar vi en variabel med namnet total och en array med namnet numbers som innehåller sju heltal:

int total = 0; 
int [] numbers = {20, 33, 40, 55, 8, 99, 120};

För att räkna ut summan av alla tal i arrayen, kan vi loopa igenom alla tal med en enhanced for-loop och spara summan i variabeln total:

for (int element : numbers){ 

    total = total + element; 
}

Om vi istället vill använda den vanliga for-loopen skriver vi enkelt,

for (int i = 0; i < numbers.length; i++){ 
    
    total = total + numbers[i];
}

Notera att vi använder den inbyggda funktionen length som ger oss längden av en array, som vi använder för att ställa upp villkoret att så länge i är mindre än längden på vår array numbers så ska loopen utföras.

Vidare, båda looparna fungerar precis lika bra i det här fallet och ger svaret

375

Exempel 3: Skriv ut udda talen i en array med hjälp av en enhanced for-loop

Vi tar ett tredje och sista exempel. Nu har vi en array som heter numbers igen som innehåller en rad olika nummer. Det vi vill göra är att skriva ut alla udda nummer som finns i numbers. Vi vill även hålla koll på hur många det är och skriva ut vilken det är i ordningen. Vi skapar variabeln count som vi använder som en räknare för att hålla koll hur många udda tal det är.

int count = 0; 
int [] numbers = {1, 8, 7, 6, 4, 2, 12, 13, 5, 4, 2, 10, 22};

Vidare, sedan skapar vi vår enhanced for-loop som går igenom numbers. Den variabel vi arbetar med döper vi, likt i exempel 2, till element. Vi använder en if-sats för att kontroller om det värde som finns på element är jämnt delbart med 2. För att göra det så använder vi en modulus.

for (int element : numbers){

    if (element % 2 != 0){
        count++;
        System.out.println("Värde: " + element +
         " i ordning: " + count);
     }
     System.out.println("\nTotalt: " + count + " udda nummer");
}

Avslutningsvis, det resultat vi får om vi kör programmet ovan blir:

Värde: 1 i ordning: 1
Värde: 7 i ordning: 2
Värde: 5 i ordning: 3
Värde: 1 i ordning: 4
Värde: 9 i ordning: 5
Värde: 3 i ordning: 6

Totalt: 6 udda nummer

Sammanfattning av enhanced for-loop i Java

En enhanced for-loop i Java är ett hjälpmedel för att enkelt och smidigt gå igenom alla element i en array. Den är, som namnet antyder, nära besläktad med for-loopen, och jämfört med just den vanliga for-loopen så ger en enhanced for-loop inte lika mycket kontroll över hur loopen ska utföras. En vanlig for-loop möjliggör att modifiera den följd loopen ska utföras, om den ska räkna varannat steg, med mera, som vi inte har möjlighet med en enhanced for-loop. Vi skapar en enhanced for-loop med följande syntax

for (datatyp variabelnamn : array) { 

      // Operation / Flera operationer ...  
}

Vanliga frågor och svar: Enhanced for-loop i Java

Måste jag använda enhanced for-loop? Kan jag inte bara använda den vanliga for-loopen hela tiden?

Nej, du måste inte använda en enhanced for-loop. Det kan dock vara bra att lära sig hur en enhanced for-loop fungerar ifall du arbetar på ett projekt med andra utvecklar och ifall det är någon där som föredrar enhanced for-loop så vet du hur den fungerar.

Är en enhanced for-loop snabbare än en vanlig for-loop?

De finns de som hävdar att den möjligtvis kan vara snabbare än en vanlig for-loop i vissa fall, men i många fall är det nästan exakt samma. För de program som vi utvecklar lär hastigheten mellan looparna ha en ytterst marginell påverkan. Vill du läsa mer om diskussionen gällande hastighet mellan enhanced for-loop och den vanliga for-loopen kan du göra det via den här länken.

Fungerar en enhanced for-loop på samma sätt som den vanliga for-loopen?

Både ja och nej. Den kan göra samma sak som den vanliga for-loopen men har ett par begränsningar. Till att börja med, en enhanced for-loop utförs i följd, med andra ord, det finns ingen räknare som det finns i den vanliga for-loopen. Vidare, enhanced for-loop kan endast iterera (gå i genom) arrayen i inkrementell ordning, det vill säga den ökar stegvis. Vi kan alltså inte konfigurera den att gå i baklänges genom en array. Avslutningsvis, en enhanced for-loop har inte tillgång till arrayens index, vilket innebär att du inte kan ersätta elementet med indexet.

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!