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.
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.
För att skapa en enhanced for-loop använder vi oss av liknande syntax som vi såg för for-loopen.
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.
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.
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:
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.
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.
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.
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.
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
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
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
Lämna gärna feedback med hjälp av stjärnorna nedan och hjälp oss att fortsätta göra sidan bättre.
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!
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 ... }
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.
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.
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!