Programmering

Sløyfe, bytte eller ta en pause? Bestemme og itere med Java-uttalelser

Java-applikasjoner vurderer uttrykk i sammenheng med uttalelser, som brukes til oppgaver som å deklarere en variabel, ta en beslutning eller iterere over utsagn. En uttalelse kan uttrykkes som en enkel eller sammensatt uttalelse:

  • EN enkel uttalelse er en enkelt frittstående instruksjon for å utføre en oppgave; den må avsluttes med semikolontegn (;).
  • EN sammensatt uttalelse er en sekvens av enkle og andre sammensatte utsagn som ligger mellom tegn med åpen og nær stag ({ og }), som avgrenser den sammensatte uttalelsens grenser. Sammensatte utsagn kan være tomme, vil vises hvor enkle utsagn dukker opp, og er alternativt kjent som blokker. En sammensatt uttalelse avsluttes ikke med semikolon.

I denne opplæringen lærer du hvordan du bruker uttalelser i Java-programmene dine. Du kan bruke uttalelser som hvis, hvis-annet, bytte om, til, og samtidig som å erklære variabler og spesifisere uttrykk, ta beslutninger, itere (eller loop) over utsagn, bryte og fortsette iterasjon og mer. Jeg legger igjen noen av de mer eksotiske uttalelsene - for eksempel uttalelser for å returnere verdier fra kalte metoder og for å kaste unntak - for fremtidige Java 101-veiledninger.

Bytt uttrykk i Java 12

Merk at denne opplæringen er oppdatert for Java 12 og inkluderer en kort introduksjon til bytte om uttrykkene.

last ned Få koden Last ned kildekoden for eksempel applikasjoner i denne opplæringen. Skapt av Jeff Friesen for JavaWorld.

Variable erklæringer og oppgaver

Jeg har tidligere introdusert Java-variabler og forklart at de må deklareres før de brukes. Fordi en variabel erklæring er en frittstående øy med kode, er den faktisk en uttalelse - a enkel uttalelse, for å være nøyaktig. Alt dette er variabel erklæring:

int alder = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Strengnavn;

En variabelerklæring består minimalt av et typenavn, eventuelt etterfulgt av en sekvens med parantesparentespar, etterfulgt av et navn, eventuelt etterfulgt av en sekvens med parantesparentespar, og avsluttes med semikolon. En variabel kan også initialiseres eksplisitt under erklæringen.

Vurder nå oppgaveerklæring, som er nært knyttet til uttalelsen om variabel erklæring. En oppgaveerklæring tilordner en verdi (muligens en referanse til en matrise eller en referanse til et objekt) til en variabel. Her er noen eksempler:

alder = 30; rentesats = 4.0F; alder + = 10; tekst [1] = 'A'; tekst [2] = 'V'; tekst [3] = 'A'; name = "John Doe";

En oppgaveerklæring er et eksempel på en uttrykk uttalelse, som er et uttrykk som kan brukes som et utsagn hvis det blir fulgt med et semikolon. Følgende uttrykk kvalifiserer også som uttrykksuttalelser:

  • Forhøyning (f.eks. ++ x;)
  • Forhåndsinnstilling (f.eks. --y;)
  • Etterøkning (f.eks. x ++;)
  • Postdecrement (f.eks. y--;)
  • Metodesamtale (f.eks. System.out.println ("Hei");)
  • Objektoppretting (f.eks. ny streng ("ABC");)

Variable erklæringer med jshell

Du kan bruke jshell å eksperimentere med variabel erklæringer og uttrykk uttalelser. Her er noen eksempler for å komme i gang (se "Lær Java fra grunnen av" for en introduksjon til Java Shell):

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> Navn på streng ==> 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

Legg merke til det alder ++ ser ikke ut til å ha oppnådd noe. Her ser du det 40 har blitt tildelt skrapevariabelen $13. Imidlertid utfører postinkrement-operatøren trinnet etter å ha returnert gjeldende verdi. (Egentlig lagrer den nåværende verdi et sted, utfører trinnet og returnerer deretter den lagrede verdien.) Angir alder beviser det alder inneholder 41, resultatet av etterøkningen.

Java Shell tilbyr forskjellige kommandoer og funksjoner som forenkler arbeidet med utdrag. For eksempel /liste kommandoen viser alle utdrag som er lagt inn i den gjeldende økten:

jshell> / liste 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Strengnavn; 5: alder = 30 6: interesse_rate = 4.0F 7: alder + = 10 8: tekst [1] = 'A' 9: tekst [2] = 'V' 10: tekst [3] = 'A' 11: navn = "John Doe" 12: tekst 13: alder ++ 14: alder

Nummeret i venstre kolonne identifiserer en kodebit unikt. Du kan bruke dette nummeret til å kjøre en kodebit på nytt, liste kodebiten, slippe (slette) en kodebit, og så videre:

jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | droppet variabel $ 7 jshell> / liste 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Strengnavn; 5: age = 30 6: interest_rate = 4.0F 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: name = "John Doe" 12 : tekst 13: alder ++ 14: alder 15: tekst

Her har vi kommet inn /12 for å kjøre utdrag nr. 12 på nytt, som sender innholdet til tekst. Vi kom inn / liste 13 for å liste utdrag # 13, som øker alder. Deretter gikk vi inn / slipp 7 for å slette kodebit nr. 7 (ikke mer alder + = 10 utdrag). Endelig kom vi inn /liste for å liste alle utdrag på nytt. Legg merke til at utdrag # 7 er fjernet, og et utdrag # 15 er lagt til takket være /12 kommando.

Å ta avgjørelser: hvis, hvis-annet, og bytt

Beslutningsuttalelser la applikasjoner velge mellom flere kjørestier. For eksempel, hvis en selger selger mer enn 500 varer denne måneden, gi selgeren en bonus. Også, hvis en elevs karakter på en algebra-test er større enn 85 prosent, så gratuler studenten for å ha gjort det bra; ellers, anbefaler studenten å studere hardere for neste test.

Java støtter hvis, hvis-annet, og bytte om avgjørelser. I tillegg en ny bytte om uttrykk-funksjonen er lagt til Java 12.

If-uttalelsen

Den enkleste av Javas avgjørelser er hvis uttalelse, som evaluerer et boolsk uttrykk og utfører en annen påstand når dette uttrykket evalueres til sant. De hvis uttalelse har følgende syntaks:

hvis (Boolsk uttrykk) uttalelse

De hvis uttalelse starter med reservert ord hvis og fortsetter med et parentesert boolsk uttrykk, som blir fulgt av uttalelsen om å utføre når det boolske uttrykket evalueres til sant.

Følgende eksempel viser hvis uttalelse. Når alder variabel inneholder en verdi på 55 eller høyere, hvis utfører System.out.println (...); for å sende meldingen:

hvis (alder> = 55) System.out.println ("Du er eller var kvalifisert for førtidspensjonering.");

Mange foretrekker å pakke inn noen enkle uttalelser som følger hvis uttalelse i parentes, effektivt konverterer den til en tilsvarende sammensatt uttalelse:

hvis (alder> = 55) {System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); }

Selv om seler avklarer hva som blir utført av hvis uttalelse, mener jeg at fordypningen gir denne klarheten, og at seler er unødvendige.

Eksperimentere med if uttalelser

La oss prøve dette eksemplet ved hjelp avjshell. Omstart jshell og deretter introdusere en alder variabel (av type int) som er initialisert til 55:

jshell> int age = 55

Deretter skriver du inn det første eksemplet hvis uttalelse (uten krøllete bukseseler rundt kroppen):

jshell> if (age> = 55) ...> System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); Du er eller var kvalifisert for førtidspensjonering. jshell>

Legg merke til at jshell> raske endringer i ...> fortsettelsesprompten når du skriver inn et multilinjeutdrag. Pressing Tast inn etter at den siste utdragslinjen forårsaker jshell for å kjøre utdraget umiddelbart.

Henrette /liste for å liste opp alle utdragene. Jeg observerer at hvis uttalelsesutdrag er tildelt 2 i økten min. Utfører /2 årsaker jshell for å liste opp og deretter utføre denne kodebiten, og den samme meldingen sendes ut.

Anta at du tildeler 25 til alder og kjør deretter på nytt /2 (eller tilsvarende utdragnummer i økten din). Denne gangen bør du ikke observere meldingen i utgangen.

Hvis-annet uttalelsen

De hvis-annet uttalelse evaluerer et boolsk uttrykk og utfører en uttalelse. Uttalelsen som utføres avhenger av om uttrykket evalueres til sant eller usant. Her er syntaksen for hvis-annet uttalelse:

hvis (Boolsk uttrykk) uttalelse 1 ellers uttalelse2

De hvis-annet uttalelse ligner på hvis uttalelse, men den inkluderer det reserverte ordet ellers, etterfulgt av en uttalelse som skal utføres når det boolske uttrykket er falskt.

Følgende eksempel viser en hvis-annet uttalelse som forteller noen som er under 55 år hvor mange år som er igjen til førtidspensjonering:

hvis (alder> = 55) System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); annet System.out.println ("Du har" + (55 - alder) + "år til førtidspensjonering.");

Betinget operatør mot hvis-annet

Den betingede operatøren (?:) ligner på et hvis-annet uttalelse. Denne operatøren kan imidlertid ikke brukes til å utføre alternative uttalelser. I stedet kan den bare returnere en av to verdier av samme type. (Den betingede operatøren er også noen ganger kjent som den ternære operatøren.)

Kjedende if-else uttalelser

Java lar deg kjede flere hvis-annet uttalelser sammen for situasjoner der du må velge en av flere utsagn å utføre:

hvis (Boolsk uttrykk1) uttalelse 1 eller hvis (Boolsk uttrykk2) uttalelse2 annet ... annet uttalelseN

Kjetting fungerer ved å utføre en påfølgende hvis ikke uttalelse når gjeldende hvis uttalelsens boolske uttrykk evalueres til falsk. Tenk på en demonstrasjon:

hvis (temperatur 100,0) System.out.println ("kokende"); annet System.out.println ("normal");

Den første hvis-annet uttalelse avgjør om temperaturverdien er negativ. I så fall kjøres det System.out.println ("frysing");. Hvis ikke, utfører den et sekund hvis-annet uttalelse.

Den andre hvis-annet uttalelse avgjør om temperaturVerdien er større enn 100. I så fall kjøres den System.out.println ("kokende");. Ellers kjøres det System.out.println ("normal");.

Dingler-annet problemet

Når hvis og hvis-annet brukes sammen, og kildekoden ikke er riktig innrykket, kan det være vanskelig å bestemme hvilken hvis forbinder med ellers. Du kan se problemet i koden nedenfor:

int x = 0; int y = 2; hvis (x> 0) hvis (y> 0) System.out.println ("x> 0 og y> 0"); annet System.out.println ("x <= 0");

Du forventer sannsynligvis å se x <= 0 som utdata fra denne koden, men det vil aldri skje; i stedet vil ingenting sendes ut. Problemet er at ellers samsvarer med det nærmeste hvis, som er hvis (y> 0). Omformatering av koden gjør det tydeligere hva som skjer:

int x = 0; int y = 2; hvis (x> 0) hvis (y> 0) System.out.println ("x> 0 og y> 0"); annet System.out.println ("x <= 0");

Her er det tydeligere enn en hvis (y> 0) ... annet ...hvis-annet uttalelse følger hvis (x> 0) uttalelse. For å matche intensjonen i forrige eksempel, må du introdusere stagtegn rundt hvis (y> 0) og dens påfølgende uttalelse. I hovedsak vil en blokk følge hvis (x> 0):

int x = 0; int y = 2; hvis (x> 0) {hvis (y> 0) System.out.println ("x> 0 og y> 0"); } annet System.out.println ("x <= 0");

Fordi x> 0 evaluerer til falsk, System.out.println ("x <= 0"); utfører. De ellers reservert ord samsvarer tydelig med opp til hvis (x> 0).

Bytteerklæringen

Når du trenger å velge mellom flere kjørestier, vil bytte om uttalelse tilbyr et mer effektivt alternativ til kjetting. Ta en titt på bytte om uttalelse:

bytte om (velgeruttrykk) {sak verdi1: uttalelse 1 [pause;] sak verdi2: uttalelse2 [pause;] ... sak verdiN: uttalelseN [pause;] [standard: uttalelse] }

De bytte om uttalelse begynner med reservert ord bytte om og fortsetter med en velgeruttrykk som velger en av de påfølgende sakene eller standardsaken som skal utføres. Velgeruttrykket evalueres til et helt tall, et tegn eller en streng.

Bytt og enum konstanter

Velgeruttrykket kan også evalueres til en enum konstant. Jeg skal introdusere enums i en fremtidig opplæring.

Hver sak identifiserer en uttalelse som skal utføres. Saken begynner med det reserverte ordet sak og en verdi som merker saken. Etter et kolon (:) karakter er utsagnet å utføre. Uttalelsen kan eventuelt følges av gå i stykker;, for å overføre henrettelsen til den første uttalelsen etter bytte om. Hvis ingen av saksetikettene samsvarer med velgeruttrykkets verdi, er det valgfrie standardtilfellet, som begynner med reservert ord misligholde, vil utføre.

Nedenfor er en bytte om setning som brukes til å bestemme om en heltallsverdi er jevn eller merkelig (ved å bruke resten av operatoren). Deretter sender den ut en passende melding via saken, hvis etikett samsvarer med resten:

int i = 27; bytte (i% 2) {tilfelle 0: System.out.println ("jevn"); gå i stykker; tilfelle 1: System.out.println ("odd"); }