JavaRush /Java блогу /Random-KY /Javaдагы Loop үчүн

Javaдагы Loop үчүн

Группада жарыяланган
Эң жакшы программист жалкоо программист дешет. Бир эле түрдөгү иш-аракеттерди бир нече жолу жасоонун ордуна, ал өзүнүн милдетин аткара турган алгоритмди ойлоп табат. Жана аны кайра жасоонун кереги жок болушу үчүн, ал муну жакшы кылат. Java'да for циклин кантип колдонсо болот - 1Бир эле codeду кайра-кайра жазбоо үчүн циклдер ойлоп табылган. Консолго 0дөн 99га чейинки сандарды көрсөтүү керек деп элестетип көрөлү. Код циклсиз:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
Бул code 100 сапты алат! Абдан көп. Ал эми бул цикл менен кандай болот:
for(int i = 0; i < 100; i++) {
   System.out.println(i);
}
Болгону 3 сап!

for циклдер деген эмне?

For цикли – алгоритмдин аткарылышынын сызыктуулугун бузуп, көрсөтүлгөн codeду көп жолу аткарууга мүмкүндүк берүүчү программалык codeдун башкаруу структурасы. Мисалы, 30 тамчы дары ичүү керек. Алгоритм төмөнкүдөй болот:
  1. Стакан даярдаңыз.
  2. КапHowты ачыңыз.
  3. 1 тамчы алыңыз.
  4. 2 тамчы алыңыз.
  5. ...
  6. 30 тамчы алыңыз.
  7. Дарыны жабыңыз.
  8. Алынган бөлүгүн алыңыз.
Бул алгоритмди тезирээк түшүндүрсө болот:
  1. Стакан даярдаңыз.
  2. Тамчы капкагын ачыңыз.
  3. 30 тамчы алыңыз.
  4. Дарыны жабыңыз.
  5. Алынган бөлүгүн алыңыз.
Биз for циклин дээрлик күн сайын башка адамдар менен баарлашууда колдонобуз: “...20 кадам көчөдө...”, “...10 кайталоо жана дагы 5 жолу 2 эсе жайыраак...”, “.. .ар кандай категориялар боюнча 5 сатып алуу жасап, байгеге ээ болуңуз...” Мен көпкө уланта алмакмын, бирок мааниси түшүнүктүү. Javaда for цикли codeуңузду кыска жана кыска сактоо үчүн абдан маанилүү.

for цикли кантип иштейт

For цикли төмөнкүдөй колдонулат:
for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
	// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
   System.out.println(i);
}
Жыйынтык:

0
1
2
3
4
Эгерде бул жазууну адам тorне которсок, анда төмөнкүнү алабыз: " 0 баштапкы мааниси менен i өзгөрмөсүн түзүңүз, ал 5ке жеткенче, ага 1ди кошуп, ар бир кадамда консолго iнин маанисин жазыңыз ." Java тorндеги for цикли үч этапка негизделген, аларды төмөнкү диаграмма менен көрсөтсө болот: Java'да for циклин кантип колдонуу керек - 2Циклден чыгуу шарты буль туюнтмасы. Эгер ал жалган болсо, цикл бүтөт. Жогорудагы мисалда өзгөрмө i1ге көбөйтүлгөн. Эгерде анын мааниси 5тен аз болсо, цикл уланат. iБирок ал 5тен чоң же барабар болгондо, цикл токтойт . Эсептөө оператору – эсептегич өзгөрмө боюнча конвертациялоочу туюнтма. Жогорудагы мисалда өзгөрмө i1ге көбөйтүлгөн. Башкача айтканда, цикл так 5 жолу аткарылат. Эгерде эсептегич оператор өзгөрмөгө 2 кошсо i, натыйжа башкача болот:
for(int i = 0; i < 5; i = i + 2) {
   System.out.println(i);
}
Жыйынтык:

0
2
4
Сиз ошондой эле өзгөрмөнү көбөйтүүгө, бөлүүгө, күчкө көтөрүүгө, жалпысынан каалаганыңызды жасай аласыз. Эң негизгиси, трансформациянын натыйжасында бир сан келип чыгат. Циклдин денеси - бул аткарыла турган каалаган code. Жогорудагы мисалда циклдин корпусу i өзгөрмөнүн маанисин консолго чыгарып жаткан, бирок бул дененин мазмуну тапшырма жана элестетүү менен чектелген. Бүткүл схеманы жыйынтыктап, бул for циклинин принциби төмөнкүдөй: циклдин денесиндеги code эсептегич оператор циклден чыгуу шартына жеткенге чейин канча жолу аткарса, ошончо жолу аткарылат. . Эгерде сиз циклден чыгуу шартын төмөнкүдөй орнотсоңуз true:
for(int i = 0; true; i++) {
   if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Андан кийин циклден кийинки code ката менен белгиленет unreachable statement, анткени ал эч качан аткарылbyte. Тапкычтык үчүн кыйынчылык: төмөндөгү codeду иштетүүнүн натыйжасында Loop endedконсолго “ ” чыгарылабы же цикл чексиз иштейби?
for(int i = 0; i > -1; i++) {
   if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
Жооп: болот. Өзгөрмө i эртеби-кечпи өзүнүн максималдуу маанисине жетет, андан ары көбөйүү аны максималдуу терс мааниге айландырат, анын натыйжасында чыгуу шарты канааттандырылат (i < = -1).

forEach цикли

Циклдер менен иштөөдө сиз кээде массивдерди же коллекцияларды кайталашыңыз керек болот. Адатта, сиз for циклин колдонуп массив аркылуу кайталасаңыз болот:
public void printAllElements(String[] stringArray) {
   for(int i = 0; i < stringArray.length; i++) {
       System.out.println(stringArray[i]);
   }
}
Жана бул туура. Бирок, массивдин бардык элементтерин бирден кайталоо үчүн, алар forEach конструкциясын ойлоп табышты. Анын кол тамгасы төмөнкүдөй:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
	// Loop body
}
Сиз бир катар саптарды кайталап, ар бирин консолго төмөнкүдөй басып чыгара аласыз:
public void printAllElements(String[] stringArray) {
   for(String s : stringArray) {
       System.out.println(s);
   }
}
Ошондой эле кыска жана кыска. Эң негизгиси, эсептегич жана чыгуунун абалы жөнүндө ойлонуунун кереги жок, биз үчүн бардыгы жасалган.

Кантип for циклдери колдонулат

Эми ар кандай маселелерди чечүү үчүн Java'да for циклин колдонуунун бир нече мисалдарын карап көрөлү.

Тескери цикл (чоңунан кичинесине)

for(int i = 5; i > 0; i--) {
   System.out.println(i);
}
Жыйынтык:

5
4
3
2
1

Бир нече өзгөрмөлөр жана циклдин корпусундагы эсептегичти көбөйтүү

For циклинде бир нече өзгөрмөлөрдү колдонсоңуз болот, мисалы, аларды эсептегич билдирүүгө айландырса болот:
int a = 0;
for(int i = 5; i > 0; i--, a++) {
   System.out.print("Step: " + a + " Meaning: ");
   System.out.println(i);
}
Жыйынтык:

Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
Же эки өзгөрмөнү жарыялап, алар бири-бирине барабар болгуча цикл жасагыла:
for(int i = 5, j = 11; i != j; i++, j--) {
   System.out.println("i: " + i + " j: " + j);
}
Жыйынтык:

i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
Бул аракеттин кандайдыр бир мааниге ээ болушу күмөн, бирок бул мүмкүнчүлүк жөнүндө билүү пайдалуу. Сиз ошондой эле for циклинин ичинде ички циклдерди түзө аласыз. Бул учурда, цикл кадамдарынын саны көбөйтүлөт:
for(int i = 0; i < 5; i++) {
   System.out.print(i + " | ");
   for(int j = 0; j < 5; j++) {
       System.out.print(j + " ");
   }
   System.out.print('\n');
}
Жыйынтык:

0 | 0 1 2 3 4 
1 | 0 1 2 3 4 
2 | 0 1 2 3 4 
3 | 0 1 2 3 4 
4 | 0 1 2 3 4
Эсептөө циклинде jтышкы циклдин эсептегичине кирүүгө болот. Бул уяланган циклдерди эки өлчөмдүү, үч өлчөмдүү жана башка массивдерди өтүүнүн идеалдуу жолуна айлантат:
int[][] array = { {0, 1, 2, 3, 4 },
                       {1, 2, 3, 4, 5},
                       {2, 3, 4, 5, 6},
                       {3, 4, 5, 6, 7}};

for(int i = 0; i < array.length; i++) {
   for(int j = 0; j < array[i].length; j++) {
       System.out.print(array[i][j] + " ");
   }
   System.out.print('\n');
}
Жыйынтык:

0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 

Циклдин эрте бүтүшү

Циклды иштеп жатканда циклди үзгүлтүккө учуратуу керек болсо, breakциклдин учурдагы корпусун токтоткон операторду колдонуңуз. Бардык кийинки итерациялар да өткөрүп жиберилет:
public void getFirstPosition(String[] stringArray, String element) {
   for (int i = 0; i < stringArray.length; i++) {
       if(stringArray[i].equals(element)) {
           System.out.println(i);
           break;
       }
   }
}
Метод массивдеги биринчи изделген элементтин ордун басып чыгарат:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
Жыйынтык:

1

Чексиз цикл

Infinite for циклин түзүүнүн дагы бир жолу - эсептегич билдирүү аймагын, чыгуу шартын жана эсептегич билдирүүнү бош калтыруу:
for (;;) {
}
Бирок көпчүлүк учурларда чексиз цикл логикалык катанын далor экенин унутпаңыз. Мындай циклдин чыгуу шарты болушу керек. Java'да for циклин кантип колдонуу керек - 3
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION