Programavimas

Kilpa, perjungti ar padaryti pertrauką? Sprendimas ir kartojimas naudojant „Java“ teiginius

Java programos vertina išraiškas kontekste pareiškimus, kurie naudojami tokioms užduotims kaip kintamojo deklaravimas, sprendimo priėmimas ar iterinimas per teiginius. Teiginys gali būti išreikštas paprastu arba sudėtiniu sakiniu:

  • A paprastas teiginys yra viena atskira užduoties vykdymo instrukcija; jis turi būti baigtas kabliataškiu (;).
  • A sudėtinis teiginys yra paprastų ir kitų sudėtinių sakinių, esančių tarp atvirojo ir uždarojo skliaustinio simbolių, seka ({ ir }), apibrėžiančiu sudėtinio teiginio ribas. Sudėtiniai teiginiai gali būti tušti, jie bus rodomi visur, kur pasirodo paprasti teiginiai, arba yra žinomi kaip blokai. Sudėtinis teiginys nėra baigtas kabliataškiu.

Šioje pamokoje sužinosite, kaip naudoti teiginius „Java“ programose. Galite naudoti tokius teiginius kaip jei, jei-dar, perjungti, dėlir kol deklaruoti kintamuosius ir nurodyti išraiškas, priimti sprendimus, kartoti (arba cikliuoti) teiginius, nutraukti ir tęsti iteraciją ir dar daugiau. Keletą egzotiškesnių teiginių, pvz., Reikšmių grąžinimo iš vadinamųjų metodų ir išimčių metimo, paliksiu būsimoms „Java 101“ pamokoms.

Perjungti išraiškas „Java 12“

Atminkite, kad ši mokymo programa buvo atnaujinta „Java 12“ ir joje pateikiamas trumpas įvadas perjungti išraiškos.

atsisiųsti Gauti kodą Atsisiųskite šaltinį, pvz., programas, šioje pamokoje. Sukūrė Jeffas Friesenas, skirtas „JavaWorld“.

Kintamos deklaracijos ir užduotys

Anksčiau pristačiau „Java“ kintamuosius ir paaiškinau, kad prieš juos reikia deklaruoti. Kadangi kintamoji deklaracija yra atskira kodo sala, tai iš tikrųjų yra sakinys - a paprastas teiginys, būti tiksliam. Visa tai yra kintamųjų deklaracijų teiginiai:

int amžius = 25; kintama palūkanų norma; char [] text = {'J', 'a', 'v', 'a'}; Stygos pavadinimas;

Kintamą deklaraciją minimaliai sudaro tipo pavadinimas, pasirinktinai sekant laužtinių skliaustų porų seką, po kurios seka pavadinimas, pasirinktinai po laužtinių skliaustų porų seka ir baigiamas kabliataškiu. Kintamasis taip pat gali būti aiškiai inicijuojamas jo deklaravimo metu.

Dabar apsvarstykite užduoties pareiškimas, kuris yra glaudžiai susijęs su kintamojo deklaracijos sakiniu. Priskyrimo sakinyje kintamajam priskiriama reikšmė (galbūt nuoroda į masyvą arba nuoroda į objektą). Štai keletas pavyzdžių:

amžius = 30; palūkanų norma = 4,0F; amžius + = 10; tekstas [1] = „A“; tekstas [2] = „V“; tekstas [3] = „A“; vardas = "Jonas Doe";

Priskyrimo sakinys yra išraiškos teiginys, kuri yra išraiška, kuri gali būti naudojama kaip sakinys, jei po jos yra kabliataškis. Šie posakiai taip pat kvalifikuojami kaip posakio teiginiai:

  • Išankstinis padidėjimas (pvz., ++ x;)
  • Išankstinis išlyginimas (pvz., --y;)
  • Postincrement (pvz., x ++;)
  • Pabaiga (pvz., y--;)
  • Metodo iškvietimas (pvz., System.out.println („Labas“);)
  • Objekto kūrimas (pvz., nauja styginė („ABC“);)

Kintamos deklaracijos su jshell

Tu gali naudoti jshell eksperimentuoti su kintamomis deklaracijomis ir išraiškos teiginiais. Štai keli pavyzdžiai, kaip pradėti naudotis („Java Shell“ įvadą rasite skyrelyje „Sužinokite„ Java “iš pagrindų“):

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> Stygos pavadinimo pavadinimas ==> 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> amžius ++ 13 USD ==> 40 jshell> amžiaus amžius ==> 41

Pastebėti, kad amžius ++ atrodo, kad nieko nepasiekė. Štai, jūs tai matote 40 buvo priskirtas „scratch“ kintamajam $13. Tačiau postincrement operatorius atlieka prieaugį grąžinęs dabartinę vertę. (Tiesą sakant, jis kažkur saugo dabartinę vertę, atlieka prieaugį ir tada grąžina išsaugotą vertę.) Įvedimas amžiaus tai įrodo amžiaus yra 41, postmarkravimo operacijos rezultatas.

„Java Shell“ pateikia įvairias komandas ir funkcijas, kurios supaprastina darbą su fragmentais. Pavyzdžiui, / sąrašas komanda rodo visus fragmentus, kurie buvo įvesti į dabartinį seansą:

jshell> / 1 sąrašas: int amžius = 25; 2: kintama palūkanų norma; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: stygos pavadinimas; 5: amžius = 30 6: palūkanų_ norma = 4,0 F 7: amžius + = 10 8: tekstas [1] = 'A' 9: tekstas [2] = 'V' 10: tekstas [3] = 'A' 11: vardas = „John Doe“ 12: tekstas 13: amžius ++ 14: amžius

Kairiajame stulpelyje esantis skaičius unikaliai identifikuoja fragmentą. Galite naudoti šį numerį norėdami pakartotinai vykdyti fragmentą, išvardyti fragmentą, numesti (ištrinti) fragmentą ir pan.

jshell> / 12 teksto tekstas ==> char [4] {'J', 'A', 'V', 'A'} jshell> / sąrašas 13 13: amžius ++ jshell> / drop 7 | numestas kintamasis $ 7 jshell> / 1 sąrašas: int amžius = 25; 2: kintama palūkanų norma; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: stygos pavadinimas; 5: amžius = 30 6: palūkanų norma = 4.0F 8: tekstas [1] = 'A' 9: tekstas [2] = 'V' 10: tekstas [3] = 'A' 11: vardas = "Jonas Doe" 12 : tekstas 13: amžius ++ 14: amžius 15: tekstas

Čia mes įėjome /12 iš naujo įvykdyti fragmentą Nr. 12, kuris pateikia turinį tekstas. Tada mes įėjome / 13 sąrašas išvardyti fragmentą Nr. 13, kuris didėja amžiaus. Toliau mes įėjome / lašas 7 ištrinti fragmentą Nr. 7 (ne daugiau amžius + = 10 fragmentas). Galiausiai įėjome / sąrašas iš naujo išvardyti visus fragmentus. Atkreipkite dėmesį, kad fragmentas Nr. 7 buvo pašalintas, o fragmentas Nr. 15 buvo pridėtas /12 komandą.

Priimdami sprendimus: jei, jei ne, ir perjunkite

Sprendimų pareiškimai leiskite programoms pasirinkti kelis vykdymo kelius. Pavyzdžiui, jei pardavėjas šį mėnesį parduoda daugiau nei 500 daiktų, suteikite pardavėjui premiją. Be to, jei mokinio įvertinimas pagal algebros testą yra didesnis nei 85 proc., Pasveikink mokinį, kad jam sekėsi gerai; priešingu atveju rekomenduokite studentui labiau mokytis kitam testui.

„Java“ palaiko jei, jei-darir perjungti sprendimų pareiškimai. Be to, naujas perjungti išraiškų funkcija buvo pridėta prie „Java 12“.

Jei teiginys

Paprasčiausias „Java“ sprendimų pareiškimas yra jei sakinys, kuris vertina Bulio išraiška ir vykdo kitą teiginį, kai ši išraiška vertinama kaip teisinga. jei sakinys turi tokią sintaksę:

jei (Būlio išraiška) pareiškimas

jei teiginys prasideda rezervuotu žodžiu jei ir tęsiama skliaustuose esančia Būlio išraiška, po kurios eina sakinys, kurį reikia atlikti, kai Bulio išraiška įvertina tiesą.

Šis pavyzdys rodo jei pareiškimas. Kai amžiaus kintamojo vertė yra 55 arba didesnė, jei vykdo System.out.println (...); Norėdami išsiųsti pranešimą:

if (amžius> = 55) System.out.println ("Jūs turite teisę gauti ankstyvą pensiją.");

Daugelis žmonių nori supakuoti bet kokį paprastą teiginį, kuris seka jei sakinys petnešomis, efektyviai paverčiant jį lygiaverčiu sudėtiniu sakiniu:

if (amžius> = 55) {System.out.println ("Jūs turite teisę gauti ankstyvą pensiją."); }

Nors petnešos paaiškina, ką vykdo jei teiginį, manau, kad įtrauka suteikia šį aiškumą ir kad petnešos nereikalingos.

Eksperimentuokite su if teiginiais

Išbandykime šį pavyzdį naudodamijshell. Perkrauti jshell ir tada pristatykite amžiaus kintamasis (tipo tarpt), kuri inicijuojama 55:

jshell> int amžius = 55

Tada įveskite pirmąjį pavyzdį jei teiginys (be garbanotų petnešėlių, supančių jos kūną):

jshell> if (amžius> = 55) ...> System.out.println ("Jūs turite teisę gauti ankstyvą pensiją."); Jūs turite teisę į ankstyvą išėjimą į pensiją. jshell>

Atkreipkite dėmesį, kad jshell> greiti pakeitimai ...> tęsimo raginimas, kai įvedate kelių eilučių fragmentą. Spaudimas Įveskite po paskutinės fragmento eilutės sukelia jshell kad tuojau pat įvykdytų fragmentą.

Vykdyti / sąrašas išvardyti visus fragmentus. Aš pastebiu, kad jei priskirtas teiginio fragmentas 2 mano sesijoje. Vykdoma /2 priežastys jshell Norėdami išvardyti ir vykdyti šį fragmentą, bus išvestas tas pats pranešimas.

Tarkime, kad paskiriate 25 į amžiaus ir tada įvykdyti iš naujo /2 (arba lygiavertį jūsų sesijos fragmento numerį). Šį kartą neturėtumėte stebėti išvesties pranešimo.

„If-else“ teiginys

jei-dar sakinys įvertina Bulio išraiška ir vykdo sakinį. Vykdomas sakinys priklauso nuo to, ar išraiška vertinama kaip teisinga, ar klaidinga. Štai sintaksė jei-dar pareiškimas:

jei (Būlio išraiška) pareiškimas1 Kitas pareiškimas2

jei-dar teiginys yra panašus į jei teiginį, tačiau jame yra rezervuotas žodis Kitas, po kurio pateikiamas sakinys, kurį reikia įvykdyti, kai Bulio išraiška yra klaidinga.

Šis pavyzdys rodo jei-dar pareiškimas, kuriame jaunesniam nei 55 metų asmeniui nurodoma, kiek metų liko iki ankstyvos pensijos:

if (amžius> = 55) System.out.println ("Jūs turite teisę gauti ankstyvą pensiją."); else System.out.println ("Iki ankstyvo išėjimo į pensiją turite" + (55 m.) + "metų".);

Sąlyginis operatorius vs jei-dar

Sąlyginis operatorius (?:) yra panašus į jei-dar pareiškimas. Tačiau šio operatoriaus negalima naudoti pakaitiniams sakiniams vykdyti. Vietoj to jis gali grąžinti tik vieną iš dviejų to paties tipo reikšmių. (Sąlyginis operatorius taip pat kartais vadinamas trinčiu operatoriumi.)

Grandininiai „jei-dar“ teiginiai

„Java“ leidžia jums susieti kelias grandines jei-dar teiginiai kartu situacijoms, kai jums reikia pasirinkti vieną iš kelių sakinių, kuriuos norite atlikti:

jei (Būlio išraiška) pareiškimas1 kitaip jei (Būlio išraiška2) pareiškimas2 dar ... dar pareiškimasN

Grandinės darbai atliekant paskesnį jei-dar pareiškimas, kai srovė jei teiginio Bulio išraiška vertinama kaip klaidinga. Apsvarstykite demonstraciją:

if (temperatūra 100,0) System.out.println ("verdantis"); else System.out.println ("normalus");

Pirmas jei-dar sakinys nustato, ar temperatūravertė yra neigiama. Jei taip, jis vykdo System.out.println („užšalimas“);. Jei ne, ji vykdo sekundę jei-dar pareiškimas.

Antras jei-dar sakinys nustato, ar temperatūrareikšmė yra didesnė nei 100. Jei taip, ji vykdo System.out.println ("verdantis");. Priešingu atveju jis vykdo System.out.println ("normalus");.

Kabanti kita problema

Kada jei ir jei-dar yra naudojami kartu, o šaltinio kodas nėra tinkamai įtrauktas, gali būti sunku nustatyti, kuris jei bendrauja su Kitas. Problemą galite pamatyti žemiau esančiame kode:

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

Tikriausiai tikėtumėtės pamatyti x <= 0 kaip šio kodo išvestis, bet tai niekada neįvyks; vietoj to nieko nebus. Problema ta, kad Kitas atitinka iki artimiausio jei, kuris yra jei (y> 0). Formatuojant kodą tampa aiškiau, kas vyksta:

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

Čia aiškiau nei jei (y> 0) ... dar ...jei-dar teiginys seka jei (x> 0) pareiškimas. Norėdami suderinti ankstesnio pavyzdžio tikslą, turite įvesti petnešos simbolius jei (y> 0) ir paskesnį jos pareiškimą. Iš esmės bus blokas jei (x> 0):

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

Nes x> 0 įvertina netikrą, System.out.println ("x <= 0"); vykdo. Kitas rezervuotas žodis aiškiai sutampa su jei (x> 0).

Jungiklio teiginys

Kai reikia pasirinkti kelis vykdymo kelius, perjungti pareiškimas siūlo efektyvesnę alternatyvą grandinei. Pažvelkite į perjungti pareiškimas:

perjungti (selektoriaus išraiška) {atvejis vertė1: pareiškimas1 [pertrauka;] atvejis vertė2: pareiškimas2 [pertrauka;] ... atvejis vertėN: pareiškimasN [pertrauka;] [numatytasis: pareiškimas] }

perjungti teiginys prasideda rezervuotu žodžiu perjungti ir tęsia a selektoriaus išraiška kuris pasirenka vieną iš vėlesnių atvejų arba numatytąjį atvejį vykdyti. Pasirinkimo išraiška vertinama kaip sveikasis skaičius, simbolis ar eilutė.

Perjungti ir skaičiuoti konstantas

Pasirinkimo išraiška taip pat gali įvertinti enum pastovus. Aš pristatysiu enums būsimoje pamokoje.

Kiekvienu atveju nurodomas vykdomas sakinys. Byla prasideda nuo rezervuoto žodžio atveju ir reikšmė, žyminti bylą. Po dvitaškio (:) simbolis yra sakinys, kurį reikia vykdyti. Pareiškimą galima pasirinktinai sekti pertrauka;, perkelti vykdymą į pirmąjį po perjungti. Jei nė viena iš didžiųjų ir mažųjų raidžių etikečių neatitinka išrinktojo išraiškos vertės, pasirenkamasis numatytasis didžiosios ir mažosios raidės, prasidedančios rezervuotu žodžiu numatytas, vykdys.

Žemiau yra a perjungti sakinys naudojamas nustatyti, ar sveiko skaičiaus reikšmė yra lygi ar nelyginė (naudojant likutinį operatorių). Tada per bylą, kurios etiketė sutampa su likusia dalimi, ji pateikia atitinkamą pranešimą:

int i = 27; jungiklis (i% 2) {atvejis 0: System.out.println ("lyginis"); pertrauka; 1 atvejis: System.out.println ("nelyginis"); }
$config[zx-auto] not found$config[zx-overlay] not found