КампутарыПраграмаванне

Бясконцы for (Java) цыкл

У Java, як і практычна ў любой мове праграмавання, маюцца інструменты для забеспячэння шматразовага паўтарэння пэўнага фрагмента кода, або, як іх прынята называць, цыклаў. Цыклы ў Java прадстаўлены такімі аператарамі, як for і while, а таксама іх разнавіднасцямі. Як правіла, цыклы выкарыстоўваюцца для праходу па аднамерны і шматмерным масіваў і итерируемым структурам дадзеных (у тым ліку калекцыях) з мэтай знаходжання пэўных элементаў і далейшых аперацый з імі. Аднак гэта не адзіны спосаб прымянення такога інструмента, як цыкл Java. Прыклады выкарыстання будуць прыводзіцца па меры іх разгляду.

Цыкл While Java: апісанне і прыклады

Асноватворным аператарам цыклу ў Java з'яўляецца while. Фрагмент кода, зняволены ў яго целе, будзе паўтарацца да таго часу, пакуль ўмова выразы, зняволенага ў дужкі пасля яго, будзе задавальняць лагічнага значэнні праўдзівасці. Агульная форма аператара while мае наступны выгляд:

while (умова) {

// цела цыклу

}

Як толькі значэнне лагічнага ўмовы перастане быць сапраўдным, зняволены ў цела цыклу код перастане выконвацца і кіраванне перадасца якая ідзе адразу пасля яго радку. Калі ў целе цыклу заключаны ўсяго адзін аператар, то фігурныя дужкі можна не ставіць, аднак лічыцца добрым тонам, калі яны стаяць заўсёды. На малюнку вышэй прадстаўлена блок-схема працы дадзенага аператара.

Для нагляднасці давайце разбярэм прыклад, прадстаўлены на малюнку ніжэй:

Абвешчаная пераменная count першапачаткова мае значэнне 1. Далей мы бачым лагічны выраз, складзенае ў дужкі пасля назвы аператара. Яно будзе сапраўдным, г.зн. вяртаць значэнне true, да таго часу, пакуль значэнне зменнай count будзе менш або роўна 10. У целе цыклу з кожным праходам (ітэрацыі) значэнне зменнай павялічваецца на 1 і выводзіцца на кансольны экран. Звярніце ўвагу на тое, што калі гэтае значэньне дасягнула 11, цыкл спыніў працу.

Калі б гэтае значэньне count першапачаткова раўнялася 11, то ўмова цыклу было б ілжывым, і праграма нават не зайшла б у яго цела.

Варта адзначыць, што сінтаксіс Java дазваляе выкарыстоўваць аператар while без цела. Прывядзём прыклад. Дапусцім, у нас ёсць дзве зменныя i = 100 і j = 200, перад намі стаіць задача праграмна вылічыць іх сярэдняе арыфметычнае - для гэтага можна выкарыстоўваць «пустотелый» while:

while (++ i <--j);

У выніку значэнне любы з двух зменных будзе роўна сярэдняму іх першапачатковых значэнняў. Як бачыце, цыкл выдатна адпрацаваў без цела і выканаў усе неабходныя дзеянні ва ўмоўным выразе.

Цыкл do-while

У папярэдніх прыкладах калі ўмоўнае выраз першапачаткова вяртала значэнне false, то выкананне праграмы праігнаравала б цела цыклу і пайшло далей. Аднак часта ўзнікаюць сітуацыі, у якіх выкананне кода, які змяшчаецца ў целе цыклу, абавязкова хоць бы аднойчы незалежна ад праўдзівасці ўмоўнага выразы. Іншымі словамі бывае так, што правяраць праўдзівасць ўмоўнага выразы патрабуецца не ў пачатку, а ў канцы цыклу. Такую функцыянальнасць можа забяспечыць разнавіднасць цыклу while пад назвай do-while. Ён мае наступную форму:

do {
// цела цыклу

} While (умова);

Як мы бачым, спачатку на выкананне ідзе цела цыклу, і толькі потым правяраецца праўдзівасць ўмовы - і так кожную ітэрацыю.

Код, прыведзены вышэй, адпрацуе прыкладна гэтак жа, як у выпадку з звычайным while. Аднак калі б мы прысвоілі зменнай count значэнне 11, цела цыклу ўсё роўна выканаў бы адзін раз, перад тым як аператар змог праверыць праўдзівасць выразы.

Апісанне і прыклады for - Java цыкл

Цыкл for ўяўляе сабой універсальную і эфектыўную моўную форму ў Java. Да пятай версіі Java SDK была толькі адна традыцыйная форма аператара for, а пасля з'явілася новая - for each. У дадзеным раздзеле мы азнаёмімся з традыцыйнай формай аператара. for Java цыкл мае наступны выгляд:

Перад тым як кіраванне перадасца коду ў целе цыклу, спачатку выконваецца ініцыялізацыя зменнай i, якая выступае ў якасці лічыльніка. Далей правяраецца ўмоўнае выраз, у якім лічыльнік параўноўваецца з пэўным значэннем, і калі яно вяртае true, цела цыклу выконваецца. Затым значэнне лічыльніка змяняецца на загадзя зададзены крок і зноў правяраецца ўмоўнае выраз, і так да таго часу, пакуль ўмова не стане ілжывым. Блок-схема ніжэй ілюструе ўсе этапы працы цыклу.

Для лепшага разумення прывядзем прыклад таго, як працуе for Java цыкл:

Мы бачым, што ў якасці лічыльніка выкарыстоўваецца зменная loopVal. Пасля кожнай ітэрацыі цыклу яе значэнне будзе прырастаць на 1, і гэта будзе адбывацца да таго часу, пакуль яно не дасягне 11. Звярніце ўвагу, што кіравальную зменную можна аб'яўляць і за межамі аператара for, але калі вы не збіраецеся выкарыстоўваць гэтую зменную нідзе акрамя як у цыкле, рэкамендуецца абвяшчаць яе непасрэдна ў аператары. Майце на ўвазе, што абвешчаная ў самым аператары пераменная мае вобласць бачнасці ў межах гэтага самага цыклу.

Бываюць сітуацыі, калі патрабуецца аб'явіць некалькі кіраўнікоў цыклам зменных. For Java цыкл дазваляе паказваць дзве і больш зменныя праз коску, прычым рабіць гэта як пры іх ініцыялізацыі, так і пры ітэрацыі. Такі аператар будзе мець наступны выгляд:

for (int i = 1, int j = 10; i

Пры кожнай ітэрацыі значэнне зменнай i будзе павялічвацца на 1, а значэнне зменнай j змяншацца на 1. ітэрацыі будуць выконвацца да таго часу, пакуль i не стане больш або роўна j.

Асаблівасці прымянення аператара for

Цыкл for ўяўляе сабой даволі гнуткую канструкцыю, паколькі ўсе тры яго часткі (ініцыялізацыю, ўмова і инкремент / декремент) можна выкарыстоўваць не па прамым прызначэнні. Да прыкладу, замест умоўнага выразы з кіруючай зменнай можна падставіць любую лагічную зменную.

boolean exit = false;

for (int i = 0;! exit; ++ i) {

exit = true;

}

На прыкладзе вышэй мы можам назіраць, як праца цыклу абсалютна не залежыць ад кіруючай зменнай i і колькасць ітэрацый залежыць выключна ад таго, у які момант пераменная exit прыме значэнне true. Больш за тое кіравальную зменную можна і зусім прыбраць з цыклу і гэта ніяк не адаб'ецца на яго працы: for (;! Exit;) {}. Хоць гэта і не самы разумны спосаб праграмавання, часам гэта можа быць карысным. Галоўнае - прадугледзець сітуацыю, у якой пераменная прыме патрэбнае для выхаду з цыкла значэнне, каб не ператварыць яго ў бясконцы.

For Java цыкл можа быць абвешчаны і такім спосабам: for (;;) {}. Гэта тыповы прыклад бясконцага цыклу з асаблівымі ўмовамі перапынення. Пра тое, якім жа чынам перарываць такога роду цыклы, мы пагаворым крыху пазней.

Цыкл ў стылі for each

Цыкл foreach Java заўсёды ўжываецца для паслядоўнага перабору элементаў масіва ці якой-небудзь структуры дадзеных і выканання над імі пэўных паўтаральных аперацый. Прыклад дадзенай формы аператара for прадстаўлены ніжэй:

У якасці ітэрацыйныя зменнай аб'яўляецца name, а абвешчаны раней масіў радкоў names выступае другім аргументам аператара. Пераменная name будзе па чарзе прымаць значэння кожнага элемента масіва, пакуль усе яго элементы не будуць вынятыя. Варта адзначыць, што тып зменнай павінен быць сумяшчальным з тыпам элементаў, якія захоўваюцца ў масіве. Таксама пераменная name даступная выключна для чытання і спроба яе змены не прывядзе да змены самога элемента ў масіве.

Аператары перапынення цыкла

Існуе тры аператара перапынення цыкла: break, return і continue. Першыя два здольныя цалкам перапыніць працу цыклу, а continue перапыняе толькі працу бягучай ітэрацыі. Калі вы выкарыстоўваеце ў сваім кодзе наўмысна бясконцы цыкл Java, дадзеныя аператары абавязкова павінны ў ім прысутнічаць. Разгледзім просты прыклад выкарыстання break:

Хоць у дадзеным аператары for прадугледжана 11 ітэрацый, выканаецца толькі 8, паколькі, калі лічыльнік i будзе роўны 7, спрацуе ўмова, у целе якога маецца аператар break.

Аператар return дзейнічае аналагічным чынам, з тым адрозненнем, што ён не толькі забяспечвае выхад з цыклу Java, але і з метаду, у які змешчаны гэты цыкл.

Выкарыстанне break ў якасці goto

Варта мець на ўвазе, што break перапыняе працу толькі таго цыклу, у целе якога ён непасрэдна знаходзіцца, г.зн. калі вы выкарыстоўваеце яго ва ўкладзеным цыкле, то знешні цыкл ня спыніць сваёй працы. Для гэтага аператар break можна выкарыстоўваць у якасці цывілізаванай формы goto.

У гэтым варыянце дадзены аператар выкарыстоўваецца ў звязку з пазнакай, якая дазваляе арганізоўваць выхад не толькі з цыклаў, але і з любога блока кода. Пазнака ўяўляе сабой найменны адпаведным чынам ідэнтыфікатар з двукроп'ем пасля яго. Пазнака аб'яўляецца ў пачатку пазначаем блока кода. Каб перапыніць выкананне пазначанага блока, у патрэбным месцы неабходна абвясціць: break имя_метки. Разгледзім прыклад на малюнку ніжэй:

У кодзе абвешчана тры блокі з імёнамі метак One, Two і Three адпаведна. Аператар break з пазнакай Two ўкладзены ва ўсе тры блокі, але пры яго спрацоўванні праграма выйдзе з блокаў Three і Two і працягне выкананне ў блоку One. Г.зн. ў кансолі мы ўбачым два паведамленні: Three і One.

заключэнне

Мы азнаёміліся з паняццем цыклаў ў Java, галоўнымі аператарамі while і for, а таксама іх формамі do-while і for each адпаведна. Для лепшага разумення рэкамендуем прарабіць практыкаванні з ужываннем дадзеных аператараў у розных формах, а таксама розных спосабаў іх перапынення і пераходу з аднаго блока ў іншы.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.delachieve.com. Theme powered by WordPress.