Ohjelmointi

Silmukka, vaihto vai tauko? Java-lauseilla päättäminen ja iterointi

Java-sovellukset arvioivat lausekkeita lausunnot, joita käytetään esimerkiksi muuttujan ilmoittamiseen, päätöksen tekemiseen tai lauseiden iterointiin. Lauseke voidaan ilmaista yksinkertaisena tai yhdistettynä lauseena:

  • A yksinkertainen lausunto on yksittäinen erillinen käsky tehtävän suorittamiseksi; se on lopetettava puolipisteellä (;).
  • A yhdistetty lausunto on sarja yksinkertaisia ​​ja muita yhdistettyjä lauseita, jotka sijaitsevat avoimen ja sulkeutuvan merkin ({ ja }), jotka rajaavat yhdistetyn lauseen rajat. Yhdistetyt lauseet voivat olla tyhjiä, ne näkyvät missä tahansa yksinkertaisia ​​lauseita, ja ne tunnetaan myös nimellä lohkot. Yhdistelmälauseketta ei päätetä puolipisteellä.

Tässä opetusohjelmassa opit käyttämään lauseita Java-ohjelmissasi. Voit käyttää lauseita, kuten jos, tai muuten, vaihtaa, vartenja sillä aikaa julistaa muuttujia ja määrittää lausekkeita, tehdä päätöksiä, toistaa (tai silmukka) lauseita, katkaista ja jatkaa iterointia ja paljon muuta. Jätän joitain eksoottisempia lausekkeita - kuten lausekkeet arvojen palauttamiseksi kutsutuista menetelmistä ja poikkeusten heittämiseksi - tuleviin Java 101 -oppaisiin.

Vaihda lausekkeita Java 12: ssa

Huomaa, että tämä opetusohjelma on päivitetty Java 12: lle ja sisältää lyhyen esittelyn vaihtaa ilmaisuja.

lataa Hanki koodi Lataa lähdekoodi esimerkiksi sovelluksiin tässä opetusohjelmassa. Luonut Jeff Friesen JavaWorldille.

Muuttuvat ilmoitukset ja tehtävät

Olen aiemmin ottanut käyttöön Java-muuttujat ja selittänyt, että ne on ilmoitettava ennen käyttöä. Koska muuttujalauseke on itsenäinen koodisaari, se on käytännössä lauseke - a yksinkertainen lausunto, tarkalleen. Kaikki nämä ovat muuttuvia ilmoituksia:

int ikä = 25; kelluva korko_korko; char [] text = {'J', 'a', 'v', 'a'}; Merkkijono nimi;

Muuttujailmoitus koostuu minimaalisesti tyyppinimestä, jota seuraa valinnaisesti hakasulkuparien sekvenssi, jota seuraa nimi, jota mahdollisesti seuraa hakasulkuparien sekvenssi, ja päättyy puolipisteeseen. Muuttuja voidaan myös alustaa nimenomaisesti ilmoituksen aikana.

Harkitse nyt toimeksianto, joka liittyy läheisesti muuttujalausekkeeseen. Määrityslauseke määrittää muuttujalle arvon (mahdollisesti viittauksen matriisiin tai viitteen objektiin). Tässä on joitain esimerkkejä:

ikä = 30; korkoaste = 4,0 F; ikä + = 10; teksti [1] = 'A'; teksti [2] = 'V'; teksti [3] = 'A'; nimi = "John Doe";

Tehtävälauseke on esimerkki lauseke, joka on lauseke, jota voidaan käyttää lauseena, jos sitä seuraa puolipiste. Seuraavat lausekkeet ovat myös lausekkeita:

  • Preinkrementti (esim. ++ x;)
  • Ennakkomaksu (esim. --y;)
  • Jälkikorotus (esim. x ++;)
  • Jälkivaje (esim. y--;)
  • Menetelmän kutsu (esim. System.out.println ("Hei");)
  • Objektin luominen (esim. uusi merkkijono ("ABC");)

Muuttuvat ilmoitukset jshellillä

Voit käyttää jshell kokeilla muuttujien ilmoituksia ja lausekkeita. Tässä on joitain esimerkkejä aloittaaksesi (katso "Java-oppimisen oppiminen alusta alkaen" Java-kuoren esittelyyn):

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> Merkkijononimen nimi ==> null jshell> ikä = 30 ikä ==> 30 jshell> korko_arvo = 4.0F korkoarvo ==> 4.0 jshell > ikä + = 10 $ 7 ==> 40 jshell> teksti [1] = 'A' $ 8 ==> 'A' jshell> teksti [2] = 'V' $ 9 ==> 'V' jshell> teksti [3] = 'A' $ 10 ==> 'A' jshell> name = "John Doe" name ==> "John Doe" jshell> text text ==> char [4] {'J', 'A', 'V' , 'A'} jshell> ikä ++ $ 13 ==> 40 jshell> ikä ==> 41

Huomaa, että ikä ++ ei näytä saavuttaneen mitään. Täällä näet sen 40 on määritetty raaputusmuuttujalle $13. Jälkikorotusoperaattori suorittaa lisäyksen palautettuaan nykyisen arvon. (Itse asiassa se tallentaa nykyisen arvon jonnekin, suorittaa lisäyksen ja palauttaa sitten tallennetun arvon.) Syöttäminen ikä todistaa sen ikä sisältää 41, jälkikorotuksen tulos.

Java Shell tarjoaa useita komentoja ja ominaisuuksia, jotka yksinkertaistavat katkelmien käyttöä. Esimerkiksi /lista komento näyttää kaikki katkelmat, jotka on syötetty nykyiseen istuntoon:

jshell> / luettelo 1: int ikä = 25; 2: kelluva korko; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Merkkijonon nimi; 5: ikä = 30 6: korko_nopeus = 4,0 F 7: ikä + = 10 8: teksti [1] = 'A' 9: teksti [2] = 'V' 10: teksti [3] = 'A' 11: nimi = "John Doe" 12: teksti 13: ikä ++ 14: ikä

Vasemman sarakkeen numero yksilöi katkelman. Tämän numeron avulla voit suorittaa koodinpätkän uudelleen, luetella koodinpätkän, pudottaa (poistaa) katkelman ja niin edelleen:

jshell> / 12 tekstiteksti ==> char [4] {'J', 'A', 'V', 'A'} jshell> / luettelo 13 13: ikä ++ jshell> / drop 7 | pudotettu muuttuja $ 7 jshell> / list 1: int ikä = 25; 2: kelluva korko; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Merkkijonon nimi; 5: ikä = 30 6: korko_nopeus = 4,0F 8: teksti [1] = 'A' 9: teksti [2] = 'V' 10: teksti [3] = 'A' 11: nimi = "John Doe" 12 : teksti 13: ikä ++ 14: ikä 15: teksti

Täällä olemme tulleet /12 suorittaa uudelleen koodinpätkä # 12, joka tuottaa sisällön teksti. Tulimme sitten sisään / luettelo 13 luetteloon koodinpätkä # 13, joka kasvaa ikä. Seuraavaksi menimme sisään / pudota 7 poistaa katkelma # 7 (ei enää ikä + = 10 katkelma). Lopuksi menimme sisään /lista kaikkien katkelmien luetteloimiseksi uudelleen. Huomaa, että katkelma # 7 on poistettu ja katkelma # 15 on lisätty /12 komento.

Päätösten tekeminen: jos, jos-muu, ja vaihda

Päätöslauselmat anna sovellusten valita useiden toteutuspolkujen välillä. Jos esimerkiksi myyjä myy yli 500 tavaraa tässä kuussa, anna myyjälle bonus. Lisäksi, jos opiskelijan arvosana algebratestissä on yli 85 prosenttia, onnittele opiskelijaa siitä, että hän suoriutui hyvin; muuten suosittele, että opiskelija opiskelee kovemmin seuraavaa testiä varten.

Java tukee jos, tai muutenja vaihtaa päätöslauselmat. Lisäksi uusi vaihtaa ilmaisutoiminto on lisätty Java 12: een.

Jos-lause

Yksinkertaisin Java-ratkaisulauseke on jos lause, joka arvioi Boolen lausekkeen ja suorittaa toisen lauseen, kun tämä lauseke arvioi arvon tosi. jos lauseella on seuraava syntakse:

jos (Boolen lauseke) lausunto

jos lause alkaa varatulla sanalla jos ja jatkuu suljetussa Boolen lausekkeessa, jota seuraa suoritettava lause, kun Boolen lauseke arvioi arvon tosi.

Seuraava esimerkki osoittaa jos lausunto. Kun ikä muuttuja sisältää arvon 55 tai enemmän, jos suorittaa System.out.println (...); lähettää viesti:

if (ikä> = 55) System.out.println ("Oletko oikeutettu varhaiseläkkeelle.");

Monet ihmiset haluavat kietoa minkä tahansa yksinkertaisen lausunnon, joka seuraa jos lause aaltosulkeissa, muuntaa se tehokkaasti vastaavaksi yhdistetyksi lauseeksi:

if (ikä> = 55) {System.out.println ("Oletko oikeutettu varhaiseläkkeelle."); }

Vaikka housunkannattimet selventävät, mitä jos Uskon, että sisennys antaa tämän selkeyden ja että aaltosulkeet ovat tarpeettomia.

Kokeilemalla if-lauseita

Kokeillaan tätä esimerkkiäjshell. Uudelleenkäynnistää jshell ja esittele sitten ikä muuttuja (tyypin int), joka on alustettu 55:

jshell> int ikä = 55

Anna seuraavaksi ensimmäinen esimerkki jos lausunto (ilman kehon ympärillä olevia kiharaisia ​​olkaimia):

jshell> if (ikä> = 55) ...> System.out.println ("Oletko oikeutettu varhaiseläkkeelle."); Olet oikeutettu varhaiseläkkeelle. jshell>

Huomaa, että jshell> nopeita muutoksia ...> jatkokehote, kun kirjoitat monirivisen katkelman. Paina Tulla sisään viimeisen koodinpätkärivin jälkeen jshell suorita katkelma välittömästi.

Suorittaa /lista luetellaksesi kaikki katkelmat. Huomaan, että jos lauseen katkelma on määritetty 2 istunnossani. Suoritetaan /2 syistä jshell tämän katkelman luetteloimiseksi ja suorittamiseksi, ja sama viesti tulostetaan.

Oletetaan, että annat sen 25 että ikä ja suorita sitten uudelleen /2 (tai vastaava katkelman numero istunnossasi). Tällä kertaa sinun ei tule tarkkailla lähtöön tulevaa viestiä.

Jos-muu-lause

tai muuten lause arvioi Boolen lausekkeen ja suorittaa lauseen. Suoritettu käsky riippuu siitä, arvioiko lauseke tosi vai väärä. Tässä on syntaksi tai muuten lausunto:

jos (Boolen lauseke) lausunto 1 muu lausunto 2

tai muuten -lauseke on samanlainen kuin jos lauseke, mutta se sisältää varatun sanan muu, jota seuraa lause, joka suoritetaan, kun Boolen lauseke on väärä.

Seuraava esimerkki osoittaa tai muuten lausunto, joka kertoo alle 55-vuotiaalle henkilölle, kuinka monta vuotta on jäljellä varhaiseläkkeelle siirtymiseen:

if (ikä> = 55) System.out.println ("Oletko oikeutettu varhaiseläkkeelle."); else System.out.println ("Varhaiseläkkeelle siirtymiseen on vielä + (55 - ikä) +" vuotta).);

Ehdollinen operaattori vs. jos-muu

Ehdollinen operaattori (?:) on samanlainen kuin tai muuten lausunto. Tätä operaattoria ei kuitenkaan voida käyttää vaihtoehtoisten lauseiden suorittamiseen. Sen sijaan se voi palauttaa vain yhden kahdesta saman tyyppisestä arvosta. (Ehdollista operaattoria kutsutaan joskus myös kolmikantaiseksi operaattoriksi.)

Ketjua jos-muu lausunnot

Java antaa sinun ketjuttaa useita tai muuten lauseet yhdessä tilanteisiin, joissa sinun on valittava yksi useista lauseista suoritettavaksi:

jos (Boolen lauseke 1) lausunto 1 muuten jos (Boolen lauseke 2) lausunto 2 muuta ... muuta lausuntoN

Ketjutus toimii suorittamalla seuraava tai muuten lausunto aina kun nykyinen jos lauseen Boolen lauseke arvioidaan vääräksi. Harkitse mielenosoitusta:

if (lämpötila 100,0) System.out.println ("kiehuva"); else System.out.println ("normaali");

Ensimmäinen tai muuten lause määrittää, jos lämpötilaarvo on negatiivinen. Jos on, se toteuttaa System.out.println ("jäätyminen");. Jos ei, se suorittaa sekunnin tai muuten lausunto.

Toinen tai muuten lause määrittää, jos lämpötilaarvo on suurempi kuin 100. Jos näin on, se suorittaa System.out.println ("kiehuva");. Muuten se suorittaa System.out.println ("normaali");.

Riippuva muu ongelma

Kun jos ja tai muuten käytetään yhdessä, eikä lähdekoodia ole oikein sisennetty, voi olla vaikeaa määrittää mikä jos yhdistää muu. Näet ongelman alla olevasta koodista:

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

Luultavasti odotat nähdä x <= 0 tämän koodin lähdönä, mutta sitä ei koskaan tapahdu; sen sijaan mikään ei tulosta. Ongelmana on, että muu vastaa lähimpäänsä jos, mikä on jos (y> 0). Koodin alustaminen uudelleen tekee selvemmäksi mitä tapahtuu:

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

Tässä se on selkeämpi kuin jos (y> 0) ... muuten ...tai muuten -lauseke seuraa jos (x> 0) lausunto. Edellisen esimerkin tarkoituksen saavuttamiseksi sinun on esitettävä aaltosulkeusmerkit jos (y> 0) ja sen myöhempi lausunto. Pohjimmiltaan lohko seuraa jos (x> 0):

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

Koska x> 0 arvioi vääräksi, System.out.println ("x <= 0"); suorittaa. muu varattu sana vastaa selvästi jos (x> 0).

Kytkinlausunto

Kun sinun on valittava useiden suorituspolkujen välillä, vaihtaa lausunto tarjoaa tehokkaamman vaihtoehdon ketjuuntumiselle. Katsokaa vaihtaa lausunto:

vaihtaa (valitsimen lauseke) {tapaus arvo 1: lausunto 1 [tauko;] tapaus arvo2: lausunto 2 [tauko;] ... tapaus arvoN: lausuntoN [tauko;] [oletus: lausunto] }

vaihtaa lause alkaa varatulla sanalla vaihtaa ja jatkuu a valitsimen lauseke joka valitsee yhden seuraavista tapauksista tai oletustapauksen suoritettavaksi. Valintalauseke arvioi kokonaisluvun, merkin tai merkkijonon.

Vaihda ja laskea vakioita

Valintalauseke voi myös arvioida enum vakio. Esittelen enums tulevassa opetusohjelmassa.

Jokainen tapaus yksilöi suoritettavan lausekkeen. Tapaus alkaa varatulla sanalla tapauksessa ja arvo, joka merkitsee tapauksen. Kaksoispisteen jälkeen (:) -merkki on suoritettava käsky. Lausetta voidaan vaihtoehtoisesti seurata tauko;, siirtää suorituksen ensimmäiseen lauseeseen sen jälkeen vaihtaa. Jos mikään kirjainkokoista ei vastaa valintalausekkeen arvoa, valinnainen oletusarvo, joka alkaa varatulla sanalla oletuksena, suorittaa.

Alla on a vaihtaa lause, jota käytetään määrittämään, onko kokonaisluku parillinen vai pariton (käyttämällä loput operaattoria). Sitten se lähettää sopivan viestin tapauksen kautta, jonka tarra vastaa loput:

int i = 27; kytkin (i% 2) {tapaus 0: System.out.println ("parillinen"); tauko; tapaus 1: System.out.println ("pariton"); }
$config[zx-auto] not found$config[zx-overlay] not found