Programiranje

Zavijte, preklopite ali si oddahnite? Odločanje in ponavljanje s stavki Java

Aplikacije Java vrednotijo ​​izraze v kontekstu izjave, ki se uporabljajo za naloge, kot je razglasitev spremenljivke, odločanje ali ponavljanje stavkov. Izjavo lahko izrazimo kot preprosto ali sestavljeno izjavo:

  • A preprosta izjava je eno samostojno navodilo za izvajanje naloge; končati mora biti s podpičjem (;).
  • A sestavljena izjava je zaporedje enostavnih in drugih sestavljenih stavkov, ki se nahajajo med odprtimi in zaklenjenimi znaki ({ in }), ki omejujejo meje sestavljenega stavka. Sestavljeni stavki so lahko prazni, pojavljajo se povsod, kjer se pojavijo preprosti stavki, in so tudi znani kot bloki. Sestavljeni stavek se ne konča s podpičjem.

V tej vadnici boste izvedeli, kako uporabljati stavke v svojih programih Java. Uporabite lahko izjave, kot so če, če potem, stikalo, za, in medtem za razglasitev spremenljivk in določanje izrazov, sprejemanje odločitev, ponovitev (ali zanko) nad stavki, prekinitev in nadaljevanje ponovitve in še več. Nekatere bolj eksotične izjave - na primer izjave za vrnitev vrednosti iz klicanih metod in metanje izjem - bom pustil za prihodnje vaje Java 101.

Preklopi izraze v Javi 12

Upoštevajte, da je bila ta vadnica posodobljena za Javo 12 in vključuje kratek uvod v stikalo izrazi.

prenos Prenesite kodo Prenesite izvorno kodo, na primer programe v tej vadnici. Ustvaril Jeff Friesen za JavaWorld.

Izjave spremenljivk in dodelitve

Pred tem sem predstavil spremenljivke Java in pojasnil, da jih je treba pred uporabo deklarirati. Ker je izjava spremenljivke samostojni otok kode, je dejansko izjava - a preprosta izjava, če smo natančni. Vse to so stavki deklaracije spremenljivk:

int starost = 25; plavajoča obrestna mera; char [] besedilo = {'J', 'a', 'v', 'a'}; Ime niza;

Deklaracija spremenljivke je minimalno sestavljena iz imena tipa, ki mu neobvezno sledi zaporedje parov kvadratnih oklepajev, čemur sledi ime, po želji zaporedje parov kvadratnih oklepajev in se zaključi s podpičjem. Spremenljivka se lahko tudi izrecno inicializira med njeno deklaracijo.

Zdaj razmislite o izjava o dodelitvi, ki je tesno povezano s stavkom deklaracije spremenljivke. Stavek o dodelitvi spremenljivki dodeli vrednost (morda sklic na matriko ali sklic na objekt). Tu je nekaj primerov:

starost = 30; obrestna mera = 4.0F; starost + = 10; besedilo [1] = 'A'; besedilo [2] = 'V'; besedilo [3] = 'A'; name = "John Doe";

Stavek o dodelitvi je primer izraz izraza, kar je izraz, ki se lahko uporabi kot stavek, če mu sledi podpičje. Naslednji izrazi so prav tako opredeljeni kot izrazi izrazov:

  • Preinkrement (npr. ++ x;)
  • Predhodno zmanjšanje (npr. - y;)
  • Postinkrement (npr. x ++;)
  • Pomanjšanje (npr. y--;)
  • Klic metode (npr. System.out.println ("Pozdravljeni");)
  • Ustvarjanje predmetov (npr. nov niz ("ABC");)

Izjave spremenljivk z jshell

Lahko uporabiš jshell eksperimentirati z deklaracijami spremenljivk in stavki izrazov. Tu je nekaj primerov za začetek (za uvod v lupino Java glejte "Učenje Jave od temelja"):

jshell> int age = 25 age ==> 25 jshell> float interes_rate rate_rate ==> 0.0 jshell> char [] text = {'J', 'a', 'v', 'a'} text ==> char [ 4] {'J', 'a', 'v', 'a'} jshell> Ime niza ime ==> null jshell> starost = 30 starost ==> 30 jshell> obrestna mera = 4.0F stopnja obresti ==> 4.0 jshell > starost + = 10 $ 7 ==> 40 jshell> besedilo [1] = 'A' $ 8 ==> 'A' jshell> besedilo [2] = 'V' $ 9 ==> 'V' jshell> besedilo [3] = 'A' $ 10 ==> 'A' jshell> name = "John Doe" name ==> jshell "John Doe"> text text ==> char [4] {'J', 'A', 'V' , 'A'} jshell> starost ++ $ 13 ==> 40 jshell> starost ==> 41

Opazite to starost ++ se zdi, da ni ničesar dosegel. Tukaj vidite 40 je bila dodeljena spremenljivki prask $13. Vendar operator postinkrementa izvede prirastek po vrnitvi trenutne vrednosti. (Pravzaprav nekje shrani trenutno vrednost, izvede prirastek in nato shrani shranjeno vrednost.) Vnos starost to dokazuje starost vsebuje 41, rezultat operacije postinkrementa.

Lupina Java ponuja različne ukaze in funkcije, ki poenostavljajo delo z delčki. Na primer / seznam ukaz prikazuje vse delčke, ki so bili vneseni v trenutno sejo:

jshell> / seznam 1: int starost = 25; 2: plavajoči interes_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Ime niza; 5: starost = 30 6: stopnja obresti = 4,0 F 7: starost + = 10 8: besedilo [1] = 'A' 9: besedilo [2] = 'V' 10: besedilo [3] = 'A' 11: ime = "John Doe" 12: besedilo 13: starost ++ 14: starost

Številka v levem stolpcu enolično določa delček. S to številko lahko znova zaženete delček, ga navedete, spustite (izbrišete) odrezek itd.:

jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | izpuščena spremenljivka $ 7 jshell> / list 1: int age = 25; 2: plavajoča obrestna mera; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Ime niza; 5: starost = 30 6: stopnja obresti = 4.0F 8: besedilo [1] = 'A' 9: besedilo [2] = 'V' 10: besedilo [3] = 'A' 11: ime = "John Doe" 12 : besedilo 13: starost ++ 14: starost 15: besedilo

Tu smo vstopili /12 za ponovno izvajanje delčka # 12, ki izpiše vsebino besedilo. Nato smo vstopili / seznam 13 za delček seznama št. 13, ki se poveča starost. Nato smo vstopili / padec 7 da izbrišete delček št. 7 (ne več starost + = 10 delček). Končno smo vstopili / seznam če želite znova našteti vse delčke. Upoštevajte, da je bil delček št. 7 odstranjen, delček št. 15 pa je bil dodan zahvaljujoč /12 ukaz.

Odločanje: če, če-drugače, in preklop

Izjave o odločbi naj aplikacije izbirajo med več izvedbenimi potmi. Če na primer prodajalec ta mesec proda več kot 500 predmetov, mu prodajalcu dodajte bonus. Če je ocena učenca na testu iz algebre večja od 85 odstotkov, čestitajte učencu za dobro opravljeno delo; v nasprotnem primeru priporočite, da se študent za naslednji preizkus bolj potrudi.

Java podpira če, če potem, in stikalo odločitve. Poleg tega novo stikalo izraz Java je dodan v Java 12.

Izjava if

Najenostavnejša izjava o odločitvi Java je če stavek, ki ovrednoti logični izraz in izvrši še en stavek, ko ta izraz oceni kot true. The če stavek ima naslednjo sintakso:

če (Logični izraz) izjavo

The če izjava se začne z rezervirano besedo če in se nadaljuje z logičnim izrazom v oklepaju, ki mu sledi stavek, ki se izvrši, ko logični izraz oceni na true.

Naslednji primer prikazuje če izjavo. Ko starost spremenljivka vsebuje vrednost 55 ali več, če izvrši System.out.println (...); za izpis sporočila:

if (starost> = 55) System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve.");

Mnogi ljudje raje zavijejo katero koli preprosto izjavo, ki sledi če stavek v oklepajih, ki ga dejansko pretvori v enakovreden sestavljeni stavek:

if (starost> = 55) {System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); }

Čeprav oklepaji pojasnjujejo, kaj izvaja če trditev verjamem, da zamik zagotavlja to jasnost in da so oklepaji nepotrebni.

Eksperimentiranje z izjavami if

Preizkusimo ta primer z uporabojshell. Ponovni zagon jshell in nato uvedite starost spremenljivka (tipa int), ki je inicializiran v 55:

jshell> int starost = 55

Nato vnesite prvi primer če izjava (brez skodranih oklepajev, ki obkrožajo njeno telo):

jshell> if (starost> = 55) ...> System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); Ste ali ste bili upravičeni do predčasne upokojitve. jshell>

Upoštevajte, da jshell> takojšnje spremembe ...> poziv za nadaljevanje, ko vnesete večvrstični delček. Pritisnite Enter po zadnji vrstici delčka odreza jshell da takoj izvedete odrezek.

Izvedite / seznam za seznam vseh delčkov. Opažam, da če odrezek je bil dodeljen 2 v moji seji. Izvršitev /2 vzroki jshell Če želite seznam in nato izvesti ta delček, se izpiše isto sporočilo.

Zdaj pa recimo, da dodelite 25 do starost in nato znova zaženite /2 (ali enakovredna številka delčka v vaši seji). Tokrat ne bi smeli upoštevati sporočila v izhodu.

Izjava if-else

The če potem stavek ovrednoti logični izraz in izvrši stavek. Izvedeni stavek je odvisen od tega, ali izraz izračuna vrednost true ali false. Tu je sintaksa za če potem izjava:

če (Logični izraz) izjava1 drugače izjava2

The če potem izjava je podobna če izjava, vendar vključuje rezervirano besedo drugače, čemur sledi stavek za izvedbo, če je logični izraz false.

Naslednji primer prikazuje če potem izjava, ki nekomu, ki je mlajši od 55 let, pove, koliko let je ostalo do predčasne upokojitve:

if (starost> = 55) System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); else System.out.println ("Imate" + (55 let) + "leta do predčasne upokojitve.");

Pogojni operator v primerjavi z if-else

Pogojni operator (?:) je podoben če potem izjavo. Vendar tega operaterja ni mogoče uporabiti za izvajanje nadomestnih stavkov. Namesto tega lahko vrne samo eno od dveh vrednosti iste vrste. (Pogojni operator je včasih znan tudi kot trojni operater.)

Veriženje stavkov if-else

Java vam omogoča večkratno povezovanje če potem izjave skupaj za situacije, ko morate za izvedbo izbrati enega od več stavkov:

če (Logični izraz1) izjava1 sicer če (Logični izraz2) izjava2 drugače ... drugače izjavaN

Veriženje del z izvajanjem naslednjega če potem stavek, kadar koli je trenutni če Boolov izraz izraza oceni na false. Razmislite o predstavitvi:

if (temperatura 100,0) System.out.println ("vrenje"); else System.out.println ("normalno");

Prvi če potem izjava določa, če temperaturaje vrednost negativna. Če je tako, se izvrši System.out.println ("zamrzovanje");. V nasprotnem primeru izvede sekundo če potem izjavo.

Drugi če potem izjava določa, če temperaturaVrednost je večja od 100. V tem primeru se izvede System.out.println ("vrenje");. V nasprotnem primeru se izvrši System.out.println ("normalno");.

Težave z bingljanjem

Kdaj če in če potem se uporabljajo skupaj in izvorna koda ni pravilno zamaknjena, je težko določiti katero če sodelavci z drugače. Težavo lahko vidite v spodnji kodi:

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

Verjetno bi pričakovali, da boste videli x <= 0 kot izhod iz te kode, vendar se to ne bo zgodilo; namesto tega ne bo nič. Težava je v tem, da drugače ujema do najbližjega če, kateri je če (y> 0). S ponovnim formatiranjem kode je bolj jasno, kaj se dogaja:

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

Tu je bolj jasno kot če (y> 0) ... drugače ...če potem izjava sledi če (x> 0) izjavo. Če se želite ujemati z namenom prejšnjega primera, morate okrog uvesti oklepaje če (y> 0) in nadaljnjo izjavo. V bistvu bo sledil blok če (x> 0):

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

Ker x> 0 oceni na false, System.out.println ("x <= 0"); izvrši. The drugače rezervirana beseda se očitno ujema z če (x> 0).

Stavek preklopa

Ko morate izbrati med več izvedbenimi potmi, se stikalo izjava ponuja učinkovitejšo alternativo veriženju. Oglejte si stikalo izjava:

stikalo (izraz izbirnika) { Ovitek vrednost1: izjava1 [break;] primer vrednost2: izjava2 [odmor;] ... primer vrednostN: izjavaN [odmor;] [privzeto: izjavo] }

The stikalo izjava se začne z rezervirano besedo stikalo in nadaljuje z a izraz izbirnika ki izbere enega od naslednjih primerov ali privzeti primer za izvedbo. Izbirni izraz izračuna celo število, znak ali niz.

Konstante stikal in enum

Izbirni izraz lahko oceni tudi na enum konstanten. Predstavil vam bom enums v prihodnji vadnici.

Vsak primer določa stavek, ki ga je treba izvršiti. Primer se začne z rezervirano besedo Ovitek in vrednost, ki označuje primer. Po debelem črevesu (:) znak je stavek za izvedbo. Izjavi lahko po želji sledi odmor;, da prenese izvedbo na prvi stavek po stikalo. Če se nobena od oznak velikih in malih črk ne ujema z vrednostjo izbirnega izraza, je neobvezna privzeta črka, ki se začne z rezervirano besedo privzeto, se bo izvedel.

Spodaj je stikalo stavek, ki se uporablja za ugotavljanje, ali je celoštevilčna vrednost soda ali neparna (z uporabo operatorja preostanka). Nato preko ohišja, katerega nalepka se ujema z ostankom, prikaže ustrezno sporočilo:

int i = 27; stikalo (i% 2) {primer 0: System.out.println ("even"); odmor; primer 1: System.out.println ("liho"); }
$config[zx-auto] not found$config[zx-overlay] not found