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
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 programflyt 9 a) tall b) 0 tall 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
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
Sammenlikninger: Betingr, logiske uttrykk tall < 0 alder >= 18 antall == 10... true/false? Sammenlikningsoperatorer: < <= >= > ==!= 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 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
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
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
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
Flervalg: switch setning String kartxt = showinputdialog("tallkarakter :"); int tallkarakter = parseint(kartxt); String karakter = tallkarakter + " tilsvarer: "; switch ( tallkarakter ) { case 5: karakter += "A - Fremragende"; break; case 4: karakter += "B - Meget god"; break; case 3: karakter += "C - God"; break; case 2: karakter += "D - Nokså god"; break; case 1: karakter += "E - Tilstrekkelig"; break; case 0: karakter += "F - Ikke bestått"; break; default: karakter += "Ugyldig tallkarakter"; break; } showmessagedialog(null, karakter); 6108 Programmering i Java Leksjon 3 Del 1 side 15
Oppsett av switch setning Eksempel: Resultatbeskriv tall -> scoretxt Variabel i datatypen int, char eller boolean, : // tall har fått verdi eller et utrykk med verdi i en av disse datatypene. switch ( tall ) { case 5: case 4: case 3: case 2: case 1: case 0: default: scoretxt = "Ugyldig score!"; } : // Blir flyttet til neste verdi scoretxt = "Veldig bra!"; break; scoretxt = "Middels..."; break; // Blir flyttet til neste verdi scoretxt = "Dårlig resultat"; break; scoretxt = "Ikke bestått"; break; 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
6108 Programmering i Java Slutt på leksjon 3 Del 1