foreach дар Java чист?
For-each як навъи даври for мебошад, ки ҳангоми коркарди ҳамаи элементҳои массив ё коллексия истифода мешавад. "Барои ҳар" аз забони англисӣ ҳамчун "барои ҳама" тарҷума шудааст. Дар асл, ибораи foreach худ дар ин давра истифода намешавад. Синтаксиси он чунин аст:for (type itVar : array)
{
Блок операторов;
}
Навъи тағирёбандаи такроршаванда дар куҷост type
(ҳамон навъи додаҳо дар массив!), itVar
номи он аст, array
массив аст (инчунин метавонад сохтори дигари додаҳо, як намуди коллексия вуҷуд дошта бошад, масалан ArrayList
), яъне an objectе, ки дар он давра иҷро карда мешавад. Тавре ки шумо мебинед, дар ин тарҳ ҳисобкунак истифода намешавад; тағирёбандаи итератсия дар болои элементҳои массив ё коллексия такрор мешавад, на арзишҳои индекс. Њангоми иљрои чунин давра ба таѓйирёбандаи такрорї пайдарпай арзиши њар як элементи массив ё коллексия дода мешавад, ки баъд аз он блоки муќарраршудаи оператор (ё оператор) иљро мешавад.
Ба ғайр аз даври for-ҳар, Java инчунин усули forEach() дорад. Шумо метавонед дар ин бора, масалан, дар мақолаи " Навиштани давраҳоро бас кунед!" Top 10 Усулҳои беҳтарин барои кор бо коллексияҳо дар Java 8 ” |
for (int i=0; i<array.length; i++)
{
Блок операторов;
}
Намунаи Java foreach
Биёед як қатор баҳои донишҷӯёнро эҷод кунем. Сипас, бо истифода аз барои ҳар як, мо ҳамаи холҳоро чоп мекунем, холҳои миёнаро нишон медиҳем ва холҳои максималиро пайдо мекунем.public class ForEachTest {
//method that prints all grades
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int num : grades) {
System.out.print(num + "|");
}
System.out.println();
}
//method that displays the average score
public static double midGrade(int[] numbers) {
int grade = 0;
for (int num : numbers) {
grade = num + grade;
}
return ((double) grade / numbers.length);
}
//method in which the best (maximum) score is calculated
public static int bestGrade(int[] numbers) {
int maxGrade = numbers[0];
for (int num : numbers) {
if (num > maxGrade) {
maxGrade = num;
}
}
return maxGrade;
}
public static void main(String[] args) {
//array of ratings
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};
int highest_marks = bestGrade(grades);
System.out.print("All the grades: ");
printAllGrades(grades);
System.out.println("The highest grade is " + highest_marks);
System.out.println("The average grade is " + midGrade(grades));
}
}
Натиҷаи барнома:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Акнун биёед бубинем, ки усули чопи ҳамаи холҳо бо истифода аз даври муқаррарии for иҷрошуда чӣ гуна хоҳад буд:
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int i = 0; i < grades.length; i++) {
System.out.print(grades[i] + "|");
}
System.out.println();
}
Агар мо ин усулро аз метод даъват кунем main
, мо натиҷа мегирем:
All the grades: |5|10|7|8|9|9|10|12|
Намунаи истифодаи як ҳалқа барои ҳар як бо коллексияҳо
Биёед коллексияи номҳоро эҷод кунем ва ҳамаи номҳоро дар экран нишон диҳем.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);
}
Маҳдудиятҳои барои ҳар як ҳалқа
Шакли паймоне, ки барои ҳар як назар ба барои хондан бештар хонда мешавад ва таҷрибаи хубе ҳисобида мешавад, ки барои ҳар ҷое, ки онро иҷро кардан мумкин аст, истифода шавад. Бо вуҷуди ин, барои ҳар як сохтори камтар универсалӣ нисбат ба муқаррарӣ барои. Инҳоянд чанд ҳолатҳои оддӣ, ки истифодаи for-her тамоман кор намекунад ё кор хоҳад кард, аммо бо душворӣ.-
Агар шумо хоҳед, ки як ҳалқаро аз охир то аввал гузаред. Яъне, барои ҳар як аналоги мустақими codeи зерин вуҷуд надорад:
for (int i = array.length - 1; i >= 0; i--) { System.out.println(array[i]); }
-
For-each не подходит, если вы хотите внести изменения в массив. Например, не получится организовать сортировку массива, не меняя его элементы местами. Или вот, в следующем codeе изменится не элемент массива, а только итерационная переменная:
for (int itVar : array) { itVar = itVar++; }
-
Если вы ищете элемент в массиве и вам нужно вернуть (or передать дальше) индекс искомого element, лучше воспользоваться обычным циклом for.
Полезное видео о for-each, подготовленное учеником JavaRush
Циклы в курсе JavaRushНа JavaRush к использованию циклов на практике приступают на 4 уровне квеста Java Syntax. Там им посвящено несколько лекций, а также множество задач разного уровня для закрепления навыков работы с ними. Вообще, никуда вы от них не денетесь, циклы — одна из важнейших конструкций в программировании. |
Подробнее о for-each и циклах:
- For и For-Each Loop: сказ о том, How я итерировался, итерировался, да не выитерировался — хорошая подробная статья о циклах for и for-each в Java. Рассчитана на подготовленного читателя (примерно от 10 уровня JavaRush и выше).
- Оператор While. Статья посвящена самому простому циклу
while
, с которого начинается знакомство с циклами на JavaRush. - Хватит писать циклы! Топ-10 лучших методов для работы с коллекциями в Java 8. Из этой статьи студент JavaRush, который уже прошёл половину курса or больше, узнает много интересного о работе с коллекциями.
GO TO FULL VERSION