Programovanie

Slučka, prepínač alebo prestávka? Rozhodovanie a iterácia s príkazmi Java

Aplikácie Java vyhodnocujú výrazy v kontexte Vyhlásenia, ktoré sa používajú na úlohy, ako je deklarovanie premennej, rozhodovanie alebo opakovanie príkazov. Výrok možno vyjadriť ako jednoduchý alebo zložený výrok:

  • A jednoduché vyhlásenie je samostatná samostatná inštrukcia na vykonanie úlohy; musí byť ukončený bodkočiarkou (;).
  • A zložený výpis je postupnosť jednoduchých a iných zložených príkazov nachádzajúcich sa medzi znakmi zloženej zátvorky a zátvorky ({ a }), ktoré ohraničujú hranice zloženého výrazu. Zložené príkazy môžu byť prázdne, objavia sa vždy, keď sa objavia jednoduché príkazy, a sú alternatívne známe ako blokov. Zložené vyhlásenie nie je ukončené bodkočiarkou.

V tejto príručke sa dozviete, ako používať príkazy vo vašich programoch Java. Môžete použiť príkazy ako napr ak, keby-inak, prepínač, prea zatiaľ čo deklarovať premenné a špecifikovať výrazy, robiť rozhodnutia, iterovať (alebo opakovať) výpisy, prerušovať a pokračovať v iterácii atď. Niektoré z exotickejších príkazov - napríklad príkazy na vrátenie hodnôt z volaných metód a na vyvolanie výnimiek - nechám pre budúce výukové programy Java 101.

Prepínanie výrazov v prostredí Java 12

Upozorňujeme, že tento výukový program bol aktualizovaný pre verziu Java 12 a obsahuje krátke uvedenie jazyka prepínač výrazy.

stiahnuť Získajte kód Stiahnite si zdrojový kód napríklad pre aplikácie v tejto príručke. Vytvoril Jeff Friesen pre JavaWorld.

Variabilné vyhlásenia a priradenia

Predtým som predstavil premenné Java a vysvetlil som, že musia byť deklarované pred použitím. Pretože deklarácia premennej je samostatný ostrov kódu, je to vlastne vyhlásenie - a jednoduché vyhlásenie, byť presný. Všetko sú to vyhlásenia o premenných:

int vek = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Názov reťazca;

Deklarácia premennej sa minimálne skladá z názvu typu, voliteľne nasledovaného postupnosťou párov hranatých zátvoriek, nasledovaného názvom, voliteľne nasledovaného sledom párov hranatých zátvoriek, a ukončeného bodkočiarkou. Premenná môže byť tiež explicitne inicializovaná počas jej deklarácie.

Teraz zvážte priraďovací výpis, ktorý úzko súvisí s vyhlásením deklarácie premennej. Príkaz na priradenie priradí premennej hodnotu (pravdepodobne odkaz na pole alebo odkaz na objekt). Tu je niekoľko príkladov:

vek = 30; úroková sadzba = 4,0F; vek + = 10; text [1] = 'A'; text [2] = 'V'; text [3] = 'A'; meno = "John Doe";

Príkaz na zaradenie je príkladom výrazový výraz, čo je výraz, ktorý sa môže použiť ako príkaz, ak za ním nasleduje bodkočiarka. Nasledujúce výrazy sa tiež kvalifikujú ako výrazové výrazy:

  • Prírastok (napr. ++ x;)
  • Predbežný výrastok (napr. --y;)
  • Prírastok (napr. x ++;)
  • Postdecrement (napr. y-;)
  • Volanie metódou (napr. System.out.println („ahoj“);)
  • Vytváranie objektov (napr. nový reťazec („ABC“);)

Deklarácie premenných s jshell

Môžeš použiť jshell experimentovať s deklaráciami premenných a príkazmi na vyjadrenie. Tu je niekoľko príkladov, ktoré vám pomôžu začať (úvod do prostredia Java Shell nájdete v časti „Naučte sa Java od základu“):

jshell> int age = 25 age ==> 25 jshell> float interest_rate interest_rate ==> 0,0 jshell> char [] text = {'J', 'a', 'v', 'a'} text ==> char [ 4] {'J', 'a', 'v', 'a'} jshell> Názov reťazca name ==> null jshell> age = 30 age ==> 30 jshell> interest_rate = 4.0F interest_rate ==> 4.0 jshell > age + = 10 $ 7 ==> 40 jshell> text [1] = 'A' $ 8 ==> 'A' jshell> text [2] = 'V' $ 9 ==> 'V' jshell> text [3] = 'A' $ 10 ==> 'A' jshell> name = "John Doe" name ==> "John Doe" jshell> text text ==> char [4] {'J', 'A', 'V' , 'A'} jshell> age ++ $ 13 ==> 40 jshell> age age ==> 41

Všimni si vek ++ nezdá sa, že by niečo dosiahol. Tu to vidíte 40 bola priradená premennej scratch $13. Operátor postincrement však vykoná prírastok po vrátení aktuálnej hodnoty. (V skutočnosti niekam uloží aktuálnu hodnotu, vykoná prírastok a potom vráti uloženú hodnotu.) Zadávanie Vek to dokazuje Vek obsahuje 41, výsledok operácie po prírastku.

Java Shell poskytuje rôzne príkazy a funkcie, ktoré zjednodušujú prácu s úryvkami. Napríklad / zoznam príkaz zobrazuje všetky úryvky, ktoré boli zadané v aktuálnej relácii:

jshell> / zoznam 1: int vek = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Názov reťazca; 5: vek = 30 6: úroková sadzba = 4,0 F 7: vek + = 10 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: meno = "John Doe" 12: text 13: vek ++ 14: vek

Číslo v ľavom stĺpci jedinečne identifikuje úryvok. Toto číslo môžete použiť na opätovné vykonanie úryvku, jeho výpis, vypustenie (odstránenie) úryvku atď.:

jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / zoznam 13 13: age ++ jshell> / drop 7 | zrušená premenná $ 7 jshell> / zoznam 1: int vek = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Názov reťazca; 5: vek = 30 6: interest_rate = 4.0 F 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: name = "John Doe" 12 : text 13: vek ++ 14: vek 15: text

Tu sme vstúpili /12 znova vykonať úryvok č. 12, ktorého výstupom je obsah text. Potom sme vošli / zoznam 13 do zoznamu úryvok # 13, ktorý sa zvyšuje Vek. Ďalej sme vošli / pokles 7 odstrániť úryvok č. 7 (už nie vek + = 10 úryvok). Nakoniec sme vošli / zoznam znova uviesť všetky úryvky. Všimnite si, že úryvok č. 7 bol odstránený a úryvok č. 15 bol pridaný vďaka /12 príkaz.

Rozhodovanie: ak, keby-ešte, a prepnúť

Vyhlásenia o rozhodnutí nechajte aplikácie zvoliť si medzi viacerými cestami vykonania. Napríklad, ak predajca predá tento mesiac viac ako 500 položiek, poskytnite predajcovi bonus. Ak je známka študenta za test z algebry vyššia ako 85 percent, blahoželáme mu k dobrému výsledku; v opačnom prípade odporučiť, aby sa študent na ďalší test usilovnejšie učil.

Java podporuje ak, keby-inaka prepínač rozhodnutia. Dodatočne nový prepínač do Javy 12 bola pridaná funkcia výrazov.

Príkaz if

Najjednoduchšie z rozhodovacích výrokov Javy je ak príkaz, ktorý vyhodnotí booleovský výraz a vykoná ďalší príkaz, keď sa tento výraz vyhodnotí ako pravdivý. The ak príkaz má nasledujúcu syntax:

ak (Boolovský výraz) vyhlásenie

The ak vyhlásenie začína rezervovaným slovom ak a pokračuje s logickým výrazom v zátvorkách, za ktorým nasleduje príkaz na vykonanie, keď sa logický výraz vyhodnotí ako true.

Nasledujúci príklad demonštruje ak vyhlásenie. Keď Vek premenná obsahuje hodnotu 55 alebo vyššiu, ak vykonáva System.out.println (...); na výstup správy:

if (age> = 55) System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok.");

Mnoho ľudí uprednostňuje zabalenie akéhokoľvek jednoduchého tvrdenia, ktoré nasleduje za ak príkaz v zložených zátvorkách, ktorý ho efektívne prevedie na ekvivalentný zložený príkaz:

if (vek> = 55) {System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); }

Aj keď zložené zátvorky objasňujú, čo sa vykonáva ak vyhlásenie, domnievam sa, že odsadenie poskytuje túto jasnosť a že rovnátka nie sú potrebné.

Experimentovanie s príkazmi if

Vyskúšajme tento príklad pomocoujshell. Reštart jshell a potom zaviesť Vek premenná (typu int), ktorý je inicializovaný na 55:

jshell> int vek = 55

Ďalej zadajte prvý príklad ak vyhlásenie (bez zložených zátvoriek obklopujúcich jeho telo):

jshell> if (age> = 55) ...> System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); Máte alebo ste mali nárok na predčasný dôchodok. jshell>

Všimnite si, že jshell> rýchle zmeny ...> výzva na pokračovanie po zadaní úryvku viacerých riadkov. Lisovanie Zadajte po spôsobení posledného riadku úryvku jshell okamžite vykonať úryvok.

Vykonať / zoznam zoznam všetkých úryvkov. Poznamenávam, že ak úryvok z výpisu bol priradený 2 v mojej relácii. Vykonávanie /2 príčiny jshell vypísať a potom vykonať tento úryvok a rovnaká správa sa odošle.

Teraz predpokladajme, že zadáte 25 do Vek a potom znova vykonajte /2 (alebo ekvivalentné číslo úryvku vo vašej relácii). Tentokrát by ste nemali sledovať správu na výstupe.

Príkaz if-else

The keby-inak príkaz vyhodnotí booleovský výraz a vykoná príkaz. Vykonaný príkaz závisí od toho, či je výraz vyhodnotený ako pravdivý alebo nepravdivý. Tu je syntax pre keby-inak vyhlásenie:

ak (Boolovský výraz) vyhlásenie1 inak vyhlásenie2

The keby-inak vyhlásenie je podobné ako ak vyhlásenie, ale obsahuje vyhradené slovo inak, za ktorým nasleduje príkaz na vykonanie, keď je boolovský výraz nepravdivý.

Nasledujúci príklad demonštruje keby-inak vyhlásenie, ktoré hovorí niekomu, kto má menej ako 55 rokov, koľko rokov zostáva do predčasného dôchodku:

if (age> = 55) System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); else System.out.println ("Máte" + (55 - vek) + "rokov do predčasného dôchodku.");

Podmienený operátor vs ak-iný

Podmienený operátor (?:) je podobný ako keby-inak vyhlásenie. Tento operátor však nemožno použiť na vykonávanie alternatívnych príkazov. Namiesto toho môže vrátiť iba jednu z dvoch hodnôt rovnakého typu. (Podmienený operátor sa tiež niekedy nazýva ternárny operátor.)

Reťazenie príkazov if-else

Java vám umožňuje reťaziť viac keby-inak spoločné príkazy pre situácie, keď je potrebné zvoliť jeden z viacerých príkazov na vykonanie:

ak (Boolovský výraz1) vyhlásenie1 ináč Ak (Boolovský výraz2) vyhlásenie2 iné ... iné vyhlásenieN

Reťazenie funguje vykonaním následného keby-inak vyhlásenie kedykoľvek aktuálne ak Boolovský výraz príkazu sa vyhodnotí ako nepravdivý. Zvážte ukážku:

if (teplota 100,0) System.out.println ("var"); else System.out.println ("normálne");

Prvý keby-inak vyhlásenie určuje, či teplotahodnota je záporná. Ak je to tak, vykoná sa System.out.println ("zmrazenie");. Ak nie, vykoná sekundu keby-inak vyhlásenie.

Druhy keby-inak vyhlásenie určuje, či teplotaHodnota je väčšia ako 100. Ak áno, vykoná sa System.out.println ("vriaci");. V opačnom prípade sa vykoná System.out.println ("normálne");.

Problém visiaceho iného

Kedy ak a keby-inak sa používajú spoločne a zdrojový kód nie je správne odsadený, môže byť ťažké určiť, ktorý z nich ak spoločníci s inak. Problém vidíte v kóde nižšie:

int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 a y> 0"); else System.out.println ("x <= 0");

Asi by ste čakali, že uvidíte x <= 0 ako výstup z tohto kódu, ale nikdy sa to nestane; namiesto toho sa nič nebude zobrazovať. Problém je v tom, že inak sa zhoduje s najbližšou hodnotou ak, ktorý je ak (y> 0). Preformátovaním kódu sa objasní, čo sa deje:

int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 a y> 0"); else System.out.println ("x <= 0");

Tu je to jasnejšie ako if (y> 0) ... else ...keby-inak vyhlásenie nasleduje po if (x> 0) vyhlásenie. Aby ste zodpovedali zámeru predchádzajúceho príkladu, musíte dookola zaviesť zložené znaky ak (y> 0) a jeho následné vyjadrenie. V zásade bude nasledovať blok if (x> 0):

int x = 0; int y = 2; if (x> 0) {if (y> 0) System.out.println ("x> 0 a y> 0"); } else System.out.println ("x <= 0");

Pretože x> 0 vyhodnotí ako nepravdivé, System.out.println ("x <= 0"); vykonáva. The inak vyhradené slovo zreteľne zodpovedá až if (x> 0).

Prepínač

Ak si potrebujete vybrať medzi niekoľkými cestami vykonania, použije sa príkaz prepínač vyhlásenie ponúka efektívnejšiu alternatívu k reťazeniu. Pozrite sa na prepínač vyhlásenie:

prepínač (výraz selektora) {prípad hodnota1: vyhlásenie1 [break;] prípad hodnota2: vyhlásenie2 [prestávka;] ... prípad hodnotaN: vyhlásenieN [break;] [predvolené: vyhlásenie] }

The prepínač vyhlásenie začína rezervovaným slovom prepínač a pokračuje písmenom výraz selektora ktorý vyberie jeden z nasledujúcich prípadov alebo predvolený prípad, ktorý sa má vykonať. Selektorový výraz sa vyhodnotí ako celé číslo, znak alebo reťazec.

Konštanty switch a enum

Selektorový výraz sa dá vyhodnotiť aj na enum konštantný. Predstavím enums v budúcom tutoriáli.

Každý prípad označuje príkaz, ktorý sa má vykonať. Prípad sa začína rezervovaným slovom prípade a hodnotu, ktorá označí prípad. Po dvojbodke (:) znak je príkaz, ktorý sa má vykonať. Za príkazom môže prípadne nasledovať prestávka;, na prevedenie exekúcie na prvý výpis po prepínač. Ak sa žiaden z označení prípadov nezhoduje s hodnotou výrazu selektora, voliteľný predvolený veľký prípad, ktorý začína vyhradeným slovom predvolené, vykoná.

Nižšie je a prepínač príkaz používaný na určenie, či je celočíselná hodnota párna alebo nepárna (pomocou operátora zvyšku). Potom odošle príslušnú správu cez prípad, ktorého štítok sa zhoduje so zvyškom:

int i = 27; switch (i% 2) {case 0: System.out.println ("even"); prestávka; prípad 1: System.out.println ("nepárny"); }