Programmering

Sløjfe, skifte eller tage en pause? Beslutning og iterering med Java-udsagn

Java-applikationer vurderer udtryk i sammenhæng med udsagn, der bruges til opgaver som at erklære en variabel, tage en beslutning eller gentage over udsagn. En erklæring kan udtrykkes som en simpel eller en sammensat sætning:

  • EN enkel erklæring er en enkelt enkeltstående instruktion til at udføre en opgave; det skal afsluttes med et semikolon-tegn (;).
  • EN sammensat erklæring er en sekvens af enkle og andre sammensatte udsagn, der er placeret mellem åbne og lukkede tegn ({ og }), som afgrænser sammensatte erklæringens grænser. Sammensatte udsagn kan være tomme, vises overalt, hvor enkle udsagn vises, og er alternativt kendt som blokke. En sammensat sætning afsluttes ikke med et semikolon.

I denne vejledning lærer du, hvordan du bruger udsagn i dine Java-programmer. Du kan bruge udsagn som f.eks hvis, hvis ellers, kontakt, tilog mens at erklære variabler og specificere udtryk, træffe beslutninger, gentage (eller sløjfe) over udsagn, bryde og fortsætte iteration og mere. Jeg efterlader nogle af de mere eksotiske udsagn - såsom udsagn om at returnere værdier fra kaldte metoder og til at kaste undtagelser - til fremtidige Java 101-tutorials.

Skift udtryk i Java 12

Bemærk, at denne tutorial er opdateret til Java 12 og inkluderer en kort introduktion til kontakt udtryk.

download Hent koden Download kildekoden for eksempel applikationer i denne vejledning. Oprettet af Jeff Friesen til JavaWorld.

Variable erklæringer og opgaver

Jeg har tidligere introduceret Java-variabler og forklaret, at de skal erklæres, før de bruges. Fordi en variabel erklæring er en selvstændig ø med kode, er den faktisk en erklæring - a enkel erklæring, for at være præcis. Alt dette er udsagn om variabel erklæring:

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

En variabel erklæring består minimalt af et typenavn, eventuelt efterfulgt af en sekvens med firkantede parpar efterfulgt af et navn, eventuelt efterfulgt af en sekvens af firkantede parpar og afsluttet med et semikolon. En variabel kan også initialiseres eksplicit under dens erklæring.

Overvej nu opgaveerklæring, som er tæt knyttet til erklæringen om variabel erklæring. En opgaveerklæring tildeler en værdi (muligvis en reference til en matrix eller en reference til et objekt) til en variabel. Her er nogle eksempler:

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

En opgaveerklæring er et eksempel på en udtrykserklæring, som er et udtryk, der kan bruges som et udsagn, hvis det følges med et semikolon. Følgende udtryk kan også betegnes som udtrykserklæringer:

  • Forhøjelse (f.eks. ++ x;)
  • Forudindlæring (f.eks. --y;)
  • Postforøgelse (f.eks. x ++;)
  • Postdecrement (f.eks. y--;)
  • Metodeopkald (f.eks. System.out.println ("Hej");)
  • Oprettelse af objekter (f.eks. ny streng ("ABC");)

Variable erklæringer med jshell

Du kan bruge jshell at eksperimentere med variable erklæringer og udtrykserklæringer. Her er nogle eksempler for at komme i gang (se "Lær Java fra bunden" for en introduktion 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 > alder + = 10 $ 7 ==> 40 jshell> tekst [1] = 'A' $ 8 ==> 'A' jshell> tekst [2] = 'V' $ 9 ==> 'V' jshell> tekst [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

Læg mærke til det alder ++ ser ikke ud til at have opnået noget. Her ser du det 40 er tildelt scratch variablen $13. Postforøgelsesoperatøren udfører dog stigningen efter returnering af den aktuelle værdi. (Faktisk gemmer den den aktuelle værdi et eller andet sted, udfører stigningen og returnerer derefter den lagrede værdi.) Indtastning alder beviser det alder indeholder 41, resultatet af operationen efter forøgelse.

Java Shell indeholder forskellige kommandoer og funktioner, der forenkler arbejdet med uddrag. F.eks /liste kommando viser alle uddrag, der er indtastet i den aktuelle session:

jshell> / liste 1: int alder = 25; 2: flydende rentesats; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Navn på streng; 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 identificerer entydigt et uddrag. Du kan bruge dette nummer til at genudføre et uddrag, liste uddraget, slippe (slette) et uddrag osv.:

jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | faldet variabel $ 7 jshell> / liste 1: int alder = 25; 2: flydende rentesats; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Navn på streng; 5: alder = 30 6: interesse_rate = 4.0F 8: tekst [1] = 'A' 9: tekst [2] = 'V' 10: tekst [3] = 'A' 11: navn = "John Doe" 12 : tekst 13: alder ++ 14: alder 15: tekst

Her er vi kommet ind /12 for at genudføre kodestykke nr. 12, som sender indholdet af tekst. Vi gik derefter ind / liste 13 for at liste uddrag # 13, som øges alder. Derefter gik vi ind / slip 7 for at slette uddrag nr. 7 (ikke mere alder + = 10 uddrag). Endelig gik vi ind /liste for at genliste alle uddrag. Bemærk, at uddrag nr. 7 er blevet fjernet, og et uddrag nr. 15 er blevet tilføjet takket være /12 kommando.

At træffe beslutninger: hvis, hvis-ellers, og skift

Beslutningserklæringer lad applikationer vælge mellem flere stier til udførelse. For eksempel, hvis en sælger sælger mere end 500 varer denne måned, skal du give sælgeren en bonus. Også, hvis en studerendes karakter på en algebra-test er større end 85 procent, så lykønsker den studerende med at have gjort det godt; Ellers anbefaler du, at den studerende studerer hårdere til den næste test.

Java understøtter hvis, hvis ellersog kontakt beslutningserklæringer. Derudover en ny kontakt udtryksfunktion er blevet føjet til Java 12.

If-erklæringen

Den enkleste af Java's beslutningserklæringer er hvis sætning, som evaluerer et boolsk udtryk og udfører en anden sætning, når dette udtryk evalueres til sandt. Det hvis udsagn har følgende syntaks:

hvis (Boolsk udtryk) udmelding

Det hvis udsagn starter med reserveret ord hvis og fortsætter med et boolesk udtryk i parentes, der efterfølges af udsagnet om at udføre, når det boolske udtryk evalueres til sandt.

Følgende eksempel viser hvis udmelding. Når alder variabel indeholder en værdi på 55 eller derover, hvis udfører System.out.println (...); for at sende meddelelsen:

hvis (alder> = 55) System.out.println ("Du er eller var berettiget til førtidspensionering.");

Mange mennesker foretrækker at pakke ethvert simpelt udsagn, der følger hvis sætning i parentes, effektivt konvertere den til en tilsvarende sammensat sætning:

hvis (alder> = 55) {System.out.println ("Du er eller var berettiget til førtidspensionering."); }

Selvom seler tydeliggør, hvad der udføres af hvis udsagn, jeg mener, at indrykket giver denne klarhed, og at seler er unødvendige.

Eksperimentere med if udsagn

Lad os prøve dette eksempel ved hjælp afjshell. Genstart jshell og derefter introducere en alder variabel (af typen int) der er initialiseret til 55:

jshell> int alder = 55

Indtast derefter det første eksempel hvis udsagn (uden de krøllede seler, der omgiver kroppen):

jshell> if (age> = 55) ...> System.out.println ("Du er eller var berettiget til førtidspensionering."); Du er eller var berettiget til førtidspensionering. jshell>

Bemærk, at jshell> hurtige ændringer til ...> fortsættelsesprompt, når du indtaster et multiline-uddrag. Trykker på Gå ind efter den sidste uddragslinje forårsager jshell for straks at udføre uddraget.

Udfør /liste for at liste alle uddrag. Jeg bemærker, at hvis Erklæringskodestykket er tildelt 2 i min session. Udfører /2 årsager jshell for at liste og derefter udføre dette uddrag, og den samme besked udsendes.

Antag nu, at du tildeler 25 til alder og udfør derefter igen /2 (eller det tilsvarende uddragnummer i din session). Denne gang skal du ikke overholde meddelelsen i output.

Hvis-ellers-erklæringen

Det hvis ellers erklæring evaluerer et boolsk udtryk og udfører en erklæring. Den udførte sætning afhænger af, om udtrykket evalueres til sandt eller falsk. Her er syntaksen for hvis ellers udmelding:

hvis (Boolsk udtryk) erklæring1 andet erklæring2

Det hvis ellers udsagn svarer til hvis erklæring, men den indeholder det reserverede ord andetefterfulgt af en erklæring, der skal udføres, når det boolske udtryk er falsk.

Følgende eksempel viser en hvis ellers erklæring, der fortæller en person, der er under 55 år, hvor mange år der er tilbage til førtidspensionering:

hvis (alder> = 55) System.out.println ("Du er eller var berettiget til førtidspensionering."); ellers System.out.println ("Du har" + (55 - alder) + "år tilbage til førtidspensionering.");

Betinget operatør vs hvis-ellers

Den betingede operatør (?:) ligner et hvis ellers udmelding. Denne operatør kan dog ikke bruges til at udføre alternative udsagn. I stedet kan den kun returnere en af ​​to værdier af samme type. (Den betingede operatør er også undertiden kendt som den ternære operatør.)

Kædende if-else-udsagn

Java giver dig mulighed for at kæde flere hvis ellers udsagn sammen for situationer, hvor du skal vælge en af ​​flere udsagn, der skal udføres:

hvis (Boolsk udtryk 1) erklæring1 ellers hvis (Boolsk udtryk2) erklæring2 ellers ... ellers erklæringN

Kæde fungerer ved at udføre en efterfølgende hvis ellers erklæring, når den aktuelle hvis udsagnets boolske udtryk evalueres til falsk. Overvej en demonstration:

hvis (temperatur 100,0) System.out.println ("kogende"); ellers System.out.println ("normal");

Den første hvis ellers erklæring bestemmer, om temperaturværdi er negativ. I så fald udføres det System.out.println ("frysning");. Hvis ikke, udføres det et sekund hvis ellers udmelding.

Sekundet hvis ellers erklæring bestemmer, om temperaturværdi er større end 100. I så fald udføres den System.out.println ("kogende");. Ellers udføres det System.out.println ("normal");.

Problemet med dinglende andet

Hvornår hvis og hvis ellers bruges sammen, og kildekoden ikke er korrekt indrykket, kan det være svært at bestemme hvilken hvis forbinder med andet. 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"); ellers System.out.println ("x <= 0");

Du ville sandsynligvis forvente at se x <= 0 som output fra denne kode, men det vil aldrig ske; i stedet udsendes intet. Problemet er, at andet matcher det nærmeste hvis, som er hvis (y> 0). Omformatering af koden gør det tydeligere, hvad der sker:

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

Her er det klarere end en hvis (y> 0) ... ellers ...hvis ellers erklæring følger hvis (x> 0) udmelding. For at matche hensigten med det foregående eksempel skal du introducere bøjlekarakterer rundt hvis (y> 0) og dens efterfølgende erklæring. I det væsentlige følger en blok hvis (x> 0):

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

Fordi x> 0 evalueres til falsk, System.out.println ("x <= 0"); udfører. Det andet reserveret ord passer klart op til hvis (x> 0).

Switch-erklæringen

Når du skal vælge mellem flere eksekveringsstier, vises kontakt statement giver et mere effektivt alternativ til chaining. Se på kontakt udmelding:

kontakt (vælgerudtryk) { sag værdi1: erklæring1 [pause;] sag værdi2: erklæring2 [pause;] ... sag værdiN: erklæringN [pause;] [standard: udmelding] }

Det kontakt erklæring begynder med reserveret ord kontakt og fortsætter med en vælgerudtryk der vælger en af ​​de efterfølgende sager eller standardsagen, der skal udføres. Vælgerudtrykket evalueres til et heltal, et tegn eller en streng.

Skift og enum konstanter

Selektorudtrykket kan også evalueres til et enum konstant. Jeg introducerer enums i en fremtidig tutorial.

Hver sag identificerer en erklæring, der skal udføres. Sagen begynder med det reserverede ord sag og en værdi, der mærker sagen. Efter et kolon (:) karakter er udsagnet, der skal udføres. Erklæringen kan eventuelt efterfølges af pause;, for at overføre eksekvering til den første erklæring efter kontakt. Hvis ingen af ​​sagsetiketterne stemmer overens med vælgerudtrykets værdi, er den valgfri standardsag, der begynder med reserveret ord Standard, vil udføre.

Nedenfor er en kontakt sætning, der bruges til at bestemme, om et heltalsværdi er lige eller ulige (ved hjælp af resten af ​​operatoren). Derefter udsender den en passende meddelelse via sagen, hvis etiket matcher resten:

int i = 27; switch (i% 2) {case 0: System.out.println ("lige"); pause; sag 1: System.out.println ("ulige"); }