Programování

Smyčka, přepnutí nebo pauza? Rozhodování a iterace s příkazy Java

Aplikace Java vyhodnocují výrazy v kontextu prohlášení, které se používají pro úkoly, jako je deklarace proměnné, rozhodování nebo iterace nad příkazy. Výrok lze vyjádřit jako jednoduchý nebo složený výrok:

  • A jednoduché prohlášení je samostatná samostatná instrukce k provedení úkolu; musí být ukončeno středníkem (;).
  • A složený výpis je posloupnost jednoduchých a dalších složených příkazů umístěných mezi znaky složené závorky a{ a }), které ohraničují hranice složeného příkazu. Složené příkazy mohou být prázdné, zobrazí se všude, kde se objeví jednoduché příkazy, a jsou alternativně známé jako bloky. Složený příkaz není ukončen středníkem.

V tomto kurzu se naučíte, jak používat příkazy ve svých programech Java. Můžete použít příkazy jako -li, kdyby-jinak, přepínač, pro, a zatímco deklarovat proměnné a specifikovat výrazy, rozhodovat se, iterovat (nebo opakovat) příkazy, přerušovat a pokračovat v iteraci atd. Některé z exotičtějších příkazů - například příkazy pro vrácení hodnot z volaných metod a vyvolání výjimek - nechám pro budoucí výukové programy Java 101.

Přepínání výrazů v prostředí Java 12

Všimněte si, že tento výukový program byl aktualizován pro prostředí Java 12 a obsahuje krátký úvod do přepínač výrazy.

stáhnout Získat kód Stáhněte si zdrojový kód například pro aplikace v tomto výukovém programu. Vytvořil Jeff Friesen pro JavaWorld.

Deklarace proměnných a přiřazení

Předtím jsem představil proměnné Java a vysvětlil, že musí být deklarovány před použitím. Protože deklarace proměnné je samostatný ostrov kódu, je to vlastně prohlášení - a jednoduché prohlášení, být přesný. Všechny tyto příkazy jsou prohlášení o proměnné:

int věk = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Název řetězce;

Deklarace proměnné minimálně sestává z názvu typu, volitelně následovaného posloupností párů hranatých závorek, následovaných názvem, volitelně následovaných posloupností párů hranatých závorek, a ukončena středníkem. Proměnná může být také explicitně inicializována během její deklarace.

Nyní zvažte prohlášení o zadání, který úzce souvisí s příkazem deklarace proměnné. Příkaz přiřazení přiřadí hodnotu (případně odkaz na pole nebo odkaz na objekt) proměnné. Zde jsou nějaké příklady:

věk = 30; úroková sazba = 4,0 F; věk + = 10; text [1] = 'A'; text [2] = 'V'; text [3] = 'A'; name = "John Doe";

Příkladem úkolu je příklad výraz výraz, což je výraz, který lze použít jako příkaz, pokud za ním následuje středník. Následující výrazy se také kvalifikují jako výrazové výrazy:

  • Předkrm (např. ++ x;)
  • Předkrm (např. --y;)
  • Přírůstek (např. x ++;)
  • Postdecrement (např. y-;)
  • Volání metody (např. System.out.println ("Dobrý den");)
  • Vytváření objektů (např. nový řetězec („ABC“);)

Variabilní deklarace s jshell

Můžeš použít jshell experimentovat s deklaracemi proměnných a příkazy výrazů. Zde je několik příkladů, které vám pomohou začít (úvod do prostředí Java Shell najdete v části „Naučte se 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ázev řetězce 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šimněte si toho věk ++ nezdá se, že by něco dokázal. Tady to vidíte 40 byla přiřazena proměnné scratch $13. Operátor postincrement však provede přírůstek po vrácení aktuální hodnoty. (Ve skutečnosti někde uloží aktuální hodnotu, provede přírůstek a poté vrátí uloženou hodnotu.) Zadání stáří to dokazuje stáří obsahuje 41, výsledek operace po zvýšení.

Prostředí Java Shell poskytuje různé příkazy a funkce, které zjednodušují práci s úryvky. Například /seznam příkaz zobrazí všechny úryvky, které byly zadány v aktuální relaci:

jshell> / list 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Název řetězce; 5: věk = 30 6: úroková sazba = 4,0 F 7: věk + = 10 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: jméno = "John Doe" 12: text 13: věk ++ 14: věk

Číslo v levém sloupci jednoznačně identifikuje úryvek. Toto číslo můžete použít k opětovnému provedení úryvku, výpisu úryvku, odstranění (odstranění) úryvku atd.:

jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | zrušená proměnná $ 7 jshell> / list 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Název řetězce; 5: věk = 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: věk ++ 14: věk 15: text

Tady jsme vstoupili /12 znovu provést úryvek # 12, jehož výstupem je obsah text. Pak jsme vstoupili / seznam 13 do seznamu úryvek č. 13, který se zvyšuje stáří. Dále jsme vstoupili / pokles 7 odstranit úryvek č. 7 (už ne věk + = 10 úryvek). Nakonec jsme vstoupili /seznam znovu zobrazit všechny úryvky. Všimněte si, že fragment # 7 byl odstraněn a fragment # 15 byl přidán díky /12 příkaz.

Rozhodování: if-if-else, a switch

Prohlášení o rozhodnutí nechte aplikace volit mezi více cestami provedení. Například pokud prodejce prodá tento měsíc více než 500 položek, udělejte prodejci bonus. Pokud je známka studenta z testu algebry vyšší než 85 procent, blahopřejte studentovi k dobrému výsledku; v opačném případě doporučujeme, aby se student při příštím testu více učil.

Java podporuje -li, kdyby-jinak, a přepínač prohlášení o rozhodnutí. Navíc nový přepínač funkce výrazů byla přidána do Java 12.

Příkaz if

Nejjednodušší z rozhodovacích výroků Javy je -li příkaz, který vyhodnotí booleovský výraz a provede další příkaz, když se tento výraz vyhodnotí jako true. The -li příkaz má následující syntaxi:

pokud (Booleovský výraz) prohlášení

The -li výpis začíná vyhrazeným slovem -li a pokračuje s logickým výrazem v závorkách, za nímž následuje příkaz, který se má provést, když se logický výraz vyhodnotí jako true.

Následující příklad ukazuje -li prohlášení. Když stáří proměnná obsahuje hodnotu 55 nebo vyšší, -li vykonává System.out.println (...); odeslat zprávu:

if (age> = 55) System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu.");

Mnoho lidí dává přednost zabalení jakéhokoli jednoduchého prohlášení, které následuje za -li příkaz v závorkách, který jej efektivně převede na ekvivalentní složený příkaz:

if (age> = 55) {System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); }

I když složené závorky objasňují, co provádí -li prohlášení, domnívám se, že odsazení poskytuje tuto jasnost a že složené závorky nejsou nutné.

Experimentování s příkazy if

Zkusme tento příklad pomocíjshell. Restartujte jshell a poté zavést stáří proměnná (typu int), který je inicializován na 55:

jshell> int age = 55

Dále zadejte první příklad -li prohlášení (bez složených závorek obklopujících jeho tělo):

jshell> if (age> = 55) ...> System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); Jste nebo jste měli nárok na předčasný odchod do důchodu. jshell>

Všimněte si, že jshell> rychlé změny ...> výzva k pokračování, když zadáte úryvek více řádků. Lisování Enter po příčinách posledního úryvku jshell okamžitě provést úryvek.

Vykonat /seznam do seznamu všech úryvků. Pozoruji, že -li byl přidělen úryvek prohlášení 2 na mé relaci. Provádění /2 příčiny jshell vypsat a poté provést tento úryvek a vydá se stejná zpráva.

Nyní předpokládejme, že jste přiřadili 25 na stáří a poté znovu spustit /2 (nebo ekvivalentní číslo úryvku ve vaší relaci). Tentokrát byste neměli sledovat zprávu ve výstupu.

Příkaz if-else

The kdyby-jinak výraz vyhodnotí booleovský výraz a provede příkaz. Provedený příkaz závisí na tom, zda je výraz vyhodnocen jako true nebo false. Zde je syntaxe pro kdyby-jinak prohlášení:

pokud (Booleovský výraz) prohlášení1 jiný prohlášení2

The kdyby-jinak prohlášení je podobné -li prohlášení, ale obsahuje vyhrazené slovo jiný, následovaný příkazem, který se má provést, když je logický výraz nepravdivý.

Následující příklad ukazuje kdyby-jinak prohlášení, které říká někomu, kdo má méně než 55 let, kolik let zbývá do předčasného důchodu:

if (age> = 55) System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); else System.out.println ("Máte" + (55 - věk) + "let do předčasného odchodu do důchodu.");

Podmíněný operátor vs if-else

Podmíněný operátor (?:) je podobný kdyby-jinak prohlášení. Tento operátor však nelze použít k provedení alternativních příkazů. Místo toho může vrátit pouze jednu ze dvou hodnot stejného typu. (Podmíněný operátor je také někdy známý jako ternární operátor.)

Řetězení příkazů if-else

Java vám umožňuje řetězit více kdyby-jinak příkazy společně pro situace, kdy je třeba zvolit jeden z více příkazů k provedení:

pokud (Booleovský výraz1) prohlášení1 jinak pokud (Booleovský výraz2) prohlášení2 jinde ... jinde prohlášení č

Řetězení funguje provedením následujícího kdyby-jinak prohlášení kdykoli aktuální -li Booleovský výraz příkazu je vyhodnocen jako false. Zvažte demonstraci:

if (teplota 100,0) System.out.println ("vroucí"); else System.out.println ("normální");

První kdyby-jinak prohlášení určuje, zda teplotahodnota je záporná. Pokud ano, provede se System.out.println ("zmrazení");. Pokud ne, provede sekundu kdyby-jinak prohlášení.

Druhý kdyby-jinak prohlášení určuje, zda teplotaHodnota je větší než 100. Pokud ano, provede se System.out.println ("vroucí");. Jinak se provede System.out.println ("normální");.

Problém visícího jiného

Když -li a kdyby-jinak jsou používány společně a zdrojový kód není správně odsazen, může být obtížné určit který -li spolupracovníci s jiný. Problém vidíte v kódu níže:

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");

Pravděpodobně byste čekali, že to uvidíte x <= 0 jako výstup z tohoto kódu, ale nikdy se to nestane; místo toho se nic nezobrazí. Problém je v tom, že jiný odpovídá nejbližšímu -li, který je pokud (y> 0). Přeformátováním kódu je jasnější, co se děje:

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");

Tady je to jasnější než if (y> 0) ... else ...kdyby-jinak prohlášení následuje if (x> 0) prohlášení. Chcete-li odpovídat záměru předchozího příkladu, musíte zavést znaky složené závorky pokud (y> 0) a jeho následné prohlášení. V zásadě bude následovat 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");

Protože x> 0 hodnotí jako nepravdivé, System.out.println ("x <= 0"); vykonává. The jiný vyhrazené slovo jasně odpovídá až if (x> 0).

Přepínací příkaz

Pokud potřebujete vybrat mezi několika cestami provedení, přepínač prohlášení nabízí efektivnější alternativu k řetězení. Podívejte se na přepínač prohlášení:

přepínač (výraz selektoru) { případ hodnota1: prohlášení1 [break;] případ hodnota2: prohlášení2 [přestávka;] ... případ hodnotaN: prohlášení č [break;] [výchozí: prohlášení] }

The přepínač výpis začíná vyhrazeným slovem přepínač a pokračuje písmenem výraz selektoru který vybere jeden z následujících případů nebo výchozí případ k provedení. Výraz selektoru se vyhodnotí na celé číslo, znak nebo řetězec.

Konstanty switch a enum

Výraz selektoru lze také vyhodnotit na výčet konstantní. Představím výčets v budoucím výukovém programu.

Každý případ identifikuje příkaz k provedení. Případ začíná vyhrazeným slovem případ a hodnotu, která označí případ. Po dvojtečce (:) znak je příkaz, který se má provést. Za příkazem může případně následovat přestávka;, přenést provedení na první příkaz po přepínač. Pokud žádný z popisků případů neodpovídá hodnotě výrazu selektoru, volitelný výchozí případ, který začíná vyhrazeným slovem výchozí, provede.

Níže je a přepínač příkaz používaný k určení, zda je celočíselná hodnota sudá nebo lichá (pomocí operátoru zbytku). Poté odešle příslušnou zprávu prostřednictvím případu, jehož štítek odpovídá zbytku:

int i = 27; switch (i% 2) {case 0: System.out.println ("even"); přestávka; případ 1: System.out.println ("lichý"); }
$config[zx-auto] not found$config[zx-overlay] not found