6108 Programmering i Java Leksjon 3 Kontrollstrukturer Del 1: Valg Roy M. Istad 2015 Utfør av et program Programflyt så langt: start setning setning setning setning slutt Sekvensielt: Alle setninger utføres, den ene etter den andre, og ingen blir hoppet over. Programflyt fra nå av: start setning(er) Valg setning(er) setning(er) Gjentak (løkke) setning(er) setning(er) slutt 1
Valgsetninger if setning: Valg mellom to alternativ Enten så er det en mann, eller så er det en kvinne Enten blir det gitt rabatt, eller så er det fullpris Enten er man for ung, eller så er alderen høy nok switch setning: Valg mellom flere alternativ Til gitt poengsum Velg prestasjonsomtale Til gitt dagnummer Velg ukedag (dagnavn) Til gitt tegn Velg kategori (vokal, konsonant, siffer, skilletegn, ) 6108 Programmering i Java Leksjon 3 Del 1 side 3 if setning med grein 9 a) tall b) 0 tall programflyt Eksempel på kode: int tall = // innlest fra brukeren if ( tall > 0 ) showmessagedialog(null, tall +" er positivt!"); // NB! Da er altså tall <= 0 showmessagedialog(null, tall +" er ikke positivt!"); grein Utskrift i dialogvindu: a) 9 er positivt! b) 0 er ikke positivt! 6108 Programmering i Java Leksjon 3 Del 1 side 4 2
if setning uten grein int tall = parseint( showinputdialog("tall:") ); String melding = "ikke positivt!"; if ( tall > 0 ) melding = "positivt!"; Alternativ String melding = "positivt!"; if ( tall <= 0 ) melding = "ikke " + melding; showmessagedialog(null, "Tallet " + tall + " er " + melding); Det må altså ikke være noen alternativ handling, f.eks.: : // kun overtidstimer gir overtidsbetaling double overbetaling = 0; if ( overtid > 0 ) { // beregn overtidsbetaling : // fortsetter uten noen -grein programflyt Om ikke betingn er sann så går bare programmet videre 6108 Programmering i Java Leksjon 3 Del 1 side 5 if setning: Viktige begrep Beting: Uttrykk, ofte sammenlikning, som beregnes til sant (true) eller usant (false). Grein: Tilslagsmulighet i en valgsetning. Består enten av enkelt setning, eller en blokk. Blokk: Setningsliste, en eller flere setninger, avgrenset mellom krøllparenteser { Obs! Det er valgfritt med { dersom det er kun én setning i en blokk. Grein if ( beting ) { setning a; setning b; setning c; { setning d; Blokk 6108 Programmering i Java Leksjon 3 Del 1 side 6 3
Sammenlikninger: tall < 0 alder >= 18 antall == 10... Sammenlikningsoperatorer: Betingr, logiske uttrykk < <= >= > ==!= Mindre enn Mindre enn eller lik Større enn eller lik Større enn Er lik Ulik, forskjellig fra Logiske variabler (ny datatype: boolean) kan stå i en beting: boolean myndig = false, student = true; 1) if ( myndig ) evt. 2) if ( student ) Sammensatte uttrykk (jfr. vanlig/matematisk oppsett: 18 alder 67): 18 <= alder && alder <= 67 Logiske operatorer: &&! og eller ikke true/false? 6108 Programmering i Java Leksjon 3 Del 1 side 7 Erstatt følgende (type) if setning: Logisk tilordning boolean myndig; if ( alder >= 18 ) myndig = true; myndig = false; 21 alder Med følgende (type) tilordning: boolean myndig = (alder >= 18); Obs! Parentesene på høyresiden er overflødige, men bidrar til å gjøre hele tilordningen lettere å lese: boolean jubileum = (ansattår == == 25; 25); 6108 Programmering i Java Leksjon 3 Del 1 side 8 4
Sammensatte logiske uttrykk La P og Q være to logiske uttrykk (begge kan altså være true/false). Verdien til sammensetningen av logiske uttrykk kan vises i en «sannhetsverditabell» 6108 Programmering i Java Leksjon 3 Del 1 side 9 Gitt beting: if ( x<10 && y==4 ) Beregning av sannhetsverdi: Beregning av sammensatte uttrykk x<10 y==4 Her ser vi at x har verdien 7 og y har verdien 5 6108 Programmering i Java Leksjon 3 Del 1 side 10 5
Operatorprioritet Dvs. Rekkefølge for beregning. Høyere oppe, høyere prioritet Når to operatorer har samme styrke, blir de utført fra venstre mot høyre. 6 F.eks: svar = 7+5*4/3-2; // svar = 11 Operatorprioritet er Javas egen måte å sette parenteser på. F.eks. gir disse to uttrykkene samme resultat: x+3 < y*2 z > 4 && x == z ((x+3)<(y*2)) ((z>4) && (x==z)) Vi bruker parenteser for å overstyre operatorprioritet i en beregning eller for å øke lesbarheten av koden. 6108 Programmering i Java Leksjon 3 Del 1 side 11 Eksempel: Antall dager i en måned. : // innlesing av år og måned (mnd) fra brukeren int antdager = 31; // Flest måneder har 31 dager Nøstet if setning Dvs. if setning inne i if setning if ( mnd == 4 mnd == 6 mnd == 9 mnd == 11 ) antdager = 30; { // Hva med februar? if (mnd == 2) { if (( år%4 == 0 && år%100!= 0) (år%400 == 0)) antdager = 29; // skuddår antdager = 28; // ikke skuddår 2016:4 = 504 2016 0 2016:100 = 20 2000 16!= 0 Utskrift Måned 2 i år 2016 har 29 dager. String uttekst = "Måned "+ mnd +" i år "+ år +" har "+ antdager +" dager."; : 6108 Programmering i Java Leksjon 3 Del 1 side 12 6
Eksempel: Karakterbeskriv. Tallkarakter Bokstavkarakter og tekstlig beskriv Nøstet if setning String kartxt = showinputdialog("tallkarakter :"); int tallkarakter = parseint(kartxt); String karakter; // Tekst som skal få verdi... if ( tallkarakter == 5 ) karakter = "A - Fremragende"; // ikke 5 altså... if ( tallkarakter == 4 ) karakter = "B - Meget god"; if ( tallkarakter == 3 ) karakter = "C - God"; // fortsetter slik via 2, 1 og 0... Standard oppsett Koden krever stor plass og kan være vanskelig å lese/oppfatte 6108 Programmering i Java Leksjon 3 Del 1 side 13 Eksempel: Karakterbeskriv. Flervalg: "if stige" String kartxt = showinputdialog("tallkarakter :"); int tallkarakter = parseint(kartxt); String karakter = tallkarakter + " tilsvarer: "; if ( tallkarakter == 5 ) karakter += "A - Fremragende"; if ( tallkarakter == 4 ) karakter += "B - Meget god"; if ( tallkarakter == 3 ) karakter += "C - God"; if ( tallkarakter == 2 ) karakter += "D - Nokså god"; if ( tallkarakter == 1 ) karakter += "E - Tilstrekkelig"; if ( tallkarakter == 0 ) karakter += "F - Ikke bestått" karakter += "Ugyldig tallkarakter!"; showmessagedialog(null, karakter); 6108 Programmering i Java Leksjon 3 Del 1 side 14 7
Flervalg: switch setning String kartxt = showinputdialog("tallkarakter :"); int tallkarakter = parseint(kartxt); String karakter = tallkarakter + " tilsvarer: "; switch ( tallkarakter ) { case 5: karakter += "A - Fremragende"; case 4: karakter += "B - Meget god"; case 3: karakter += "C - God"; case 2: karakter += "D - Nokså god"; case 1: karakter += "E - Tilstrekkelig"; case 0: karakter += "F - Ikke bestått"; default: karakter += "Ugyldig tallkarakter"; showmessagedialog(null, karakter); 6108 Programmering i Java Leksjon 3 Del 1 side 15 Eksempel: Resultatbeskriv : // tall har fått verdi switch ( tall ) { : case 5: case 4: case 3: case 2: case 1: case 0: Oppsett av switch setning tall -> scoretxt Variabel i datatypen int, char eller boolean, eller et utrykk med verdi i en av disse datatypene. // Blir flyttet til neste verdi scoretxt = "Veldig bra!"; scoretxt = "Middels..."; // Blir flyttet til neste verdi scoretxt = "Dårlig resultat"; scoretxt = "Ikke bestått"; default: scoretxt = "Ugyldig score!"; Tilslagsmarkører i den aktuelle datatypen. Obs! Verdiene 5 og 4 gir samme resultat. Det gjør også 2 og 1. Fanger opp alle andre verdier enn dem som er listet som tilslagsmarkører. 6108 Programmering i Java Leksjon 3 Del 1 side 16 8
6108 Programmering i Java Slutt på leksjon 3 Del 1 9