Hvad er en for-hver-løkke?
En for-each er en slags for- løkke, som du bruger, når du skal behandle alle elementerne i et array eller en samling. Når det er sagt, bruges udtrykket for-each faktisk ikke i denne løkke. Dens syntaks er som følger:
for (type itVar : array)
{
// Operations
}
Hvor type er typen af iteratorvariablen (som matcher datatypen for elementer i arrayet!), er itVar dens navn, og array er et array (andre datastrukturer er også tilladt, f.eks. en form for samling, som ArrayList ), dvs. det objekt, som løkken udføres på. Som du kan se, bruger denne konstruktion ikke en tæller: Iteratorvariablen itererer simpelthen over elementerne i arrayet eller samlingen. Når en sådan løkke udføres, tildeles iteratorvariablen sekventielt værdien af hvert element i arrayet eller samlingen, hvorefter den specificerede blok af sætninger (eller sætningen) udføres.
Ud over for-each-løkken har Java også en forEach()-metode. Du kan læse om det i artiklen med titlen "Stop med at skrive loops!" Top 10 bedste praksis for at arbejde med samlinger i Java 8 |
for (int i=0; i < array.length; i++)
{
// Statements
}
Eksempel på en for-hver-løkke
Vi opretter en række elevresultater. Derefter bruger vi en for-hver- løkke til at udskrive alle estimaterne, beregne den gennemsnitlige score og finde topscore.
public class ForEachTest {
// A method that prints all scores
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int num : scores) {
System.out.print(num + "|");
}
System.out.println();
}
// A method that displays the average score
public static double getAverageScore(int[] numbers) {
int totalScore = 0;
for (int num : numbers) {
totalScore = num + totalScore;
}
return ((double) totalScore / numbers.length);
}
// A method that determines the best (maximum) score
public static int getBestScore(int[] numbers) {
int maxScore = numbers[0];
for (int num : numbers) {
if (num > maxScore) {
maxScore = num;
}
}
return maxScore;
}
public static void main(String[] args) {
// Array of scores
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};
int bestScore = getBestScore(scores);
System.out.print("All the scores: ");
printAllScores(scores);
System.out.println("The highest score is " + bestScore);
System.out.println("The average score is " + getAverageScore(scores));
}
}
Program output:
All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Lad os nu se, hvordan en metode til at udskrive alle partiturerne ville se ud, hvis vi brugte en almindelig for- løkke:
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "|");
}
System.out.println();
}
Hvis vi kalder denne metode fra hovedmetoden , får vi dette resultat:
All the scores: |5|10|7|8|9|9|10|12|
Eksempel på en for-hver-løkke med samlinger
Vi opretter en samling af navne og viser alle navnene på skærmen.
List<String> names = new ArrayList<>();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
Begrænsninger af en for-hver-løkke
For -hver- løkkens kompakte form anses for at være lettere at læse end en for- løkke, og det anses for bedste praksis at bruge en for-hver- løkke, hvor det er muligt. En for-hver- løkke er imidlertid en mindre universel konstruktion end en almindelig for- løkke. Her er nogle simple tilfælde, hvor en for-hver- løkke enten slet ikke virker eller vil fungere, men kun med besvær.-
Hvis du vil løbe gennem en løkke fra slutningen til begyndelsen. Det vil sige, at der ikke er nogen for-hver sløjfe, der er en direkte analog til følgende kode:
for (int i= array.length-1; i>0; i--) { System.out.println(array[i]); }
-
For-each er ikke egnet, hvis du vil foretage ændringer i et array. For eksempel kan du ikke sortere et array uden at ændre placeringen af dets elementer. Derudover vil kun iteratorvariablen i den følgende kode ændre sig, ikke elementet i arrayet:
for (int itVar : array) { itVar = itVar++; }
-
Hvis du leder efter et element i et array, og du skal returnere (eller videregive) indekset for det element, du leder efter, så er det bedre at bruge en almindelig for loop.
En nyttig video om for-hver-løkken
Sløjfer i CodeGym kursetPå CodeGym begynder vi at øve os i at bruge loops på niveau 4 i Java Syntax-questen . Flere af lektionerne på det niveau, såvel som mange af opgaverne på forskellige niveauer, er helliget loops for at styrke dine færdigheder i at arbejde med dem. Dybest set er der ingen måde, du kan undslippe dem - loops er en af de vigtigste konstruktioner i programmering. |
Mere information om for-hver og andre sløjfer
- Mens udtalelsen . Artiklen handler om den enkleste form for løkke:
while
løkken, som CodeGym bruger til at introducere løkker til eleverne. - Stop med at skrive loops! Top 10 bedste praksis for at arbejde med samlinger i Java 8 . Denne artikel vil hjælpe CodeGym-studerende, der er mindst halvvejs gennem kurset, med at lære mange interessante ting om at arbejde med samlinger.
GO TO FULL VERSION