Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon 2001-05-18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon 2001-05-18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/Javabok/ versjon 2001-05-18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5 Valg som kontrollstruktur Kontrollstrukturer side 2 Klassen Kalkulator med klientprogram side 3-5 Blokker inne i metoder side 6 if-setningen har to former side 7 Klammeparenteser og innrykk side 8 Nøstet if og flervalgsetninger side 9-10 Beslutningstabeller side 11 Logiske uttrykk side 12-13 Sammenligning av strenger side 14-15 Forkortet beregning side 16 switch-setningen side 17 Å sammenligne beregnede desimaltallverdier side 18

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 2 Kontrollstrukturer •En algoritme er et begrenset og ordnet sett med veldefinerte regler for løsning av et problem. •Tre kategorier rekkefølge eller kontrollstrukturer: –sekvens (alle klientprogram hittil) –valg (if-setningen) –løkke (while-setningen, se kapittel 6) •Aktivitetsdiagram illustrerer kontrollstrukturer. bestemt rekkefølge

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 3 Klassediagram og to mulige aktivitetsdiagram for et kalkulator-objekt Kalkulator tall1 tall2 finnTall1 finnTall2 settTall beregnSum beregnDifferanse beregnProdukt beregnKvotient les to tall kalkus.beregnSum() skriv ut svaret Kalkulator kalkus = new Kalkulator(tall1, tall2) skriv ut svaret kalkus. beregnDifferense() kalkus. beregnSum() [skal legge sammen] [skal ikke legge sammen] les to tall Kalkulator kalkus = new Kalkulator(tall1, tall2)

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 4 Klassen Kalkulator class Kalkulator { private double tall1 = 0; private double tall2 = 0; public Kalkulator(double startTall1, double startTall2) { tall1 = startTall1; tall2 = startTall2; } public double finnTall1() { return tall1; } public double finnTall2() { return tall2; } public void settTall(double nyttTall1, double nyttTall2) { tall1 = nyttTall1; tall2 = nyttTall2; } public double beregnSum() { return tall1 + tall2; } public double beregnDifferanse() { return tall1 - tall2; } public double beregnProdukt() { return tall1 * tall2; } public double beregnKvotient() { /* Både teller og nevner 0: * Resultat: Double.NaN ("not-a-number") * Bare nevner 0: * Resultat: Double.NEGATIVE_INFINITE * eller Double.POSITIVE_INFINITE. * Dette er klassekonstanter i klassen java.lang.Double. * Disse verdiene må brukes ved eventuell sammenlikning, * ved utskrift blir "NaN" og "Infinity" skrevet ut. */ return tall1 / tall2; }

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 5 Klientprogram med valg import mittBibliotek.*; class TestKalkulator1 { public static void main(String[] args) { JavabokGUI gui = new JavabokGUI("Kalkulator"); gui.show(); double tall1 = gui.lesDesimaltall("Kalkulator", "Første tall: "); double tall2 = gui.lesDesimaltall("Kalkulator", "Andre tall: "); Kalkulator kalkus = new Kalkulator(tall1, tall2); boolean adder = gui.jaSvar("Kalkulator", "Skal tallene legges sammen? "); double svar; if (adder) { svar = kalkus.beregnSum(); gui.skrivResultater("Vi beregner: " + kalkus.finnTall1() + " + " + kalkus.finnTall2()); } else { svar = kalkus.beregnDifferanse(); gui.skrivResultater("Vi beregner: " + kalkus.finnTall1() + " - " + kalkus.finnTall2()); } gui.skrivResultater("Svaret er " + svar); } valget må formuleres som et ja/nei-spørsmål Gjør oppgave 2 side 131.

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 6 Blokker inne i metoder •Lokale variabler er variabler deklarert inne i metoder. •Definisjonsområdet til en lokal variabel er resten av den blokken der variabelen er deklarert. •En metode kan inneholde mange blokker inne i hverandre. •Vi kan deklarere variabler inne i indre blokker. •Generelt bør vi deklarere lokale variabler i nærheten av der vi bruker dem. •Til høyre et alternativt kalkulator-program. Definisjonsområdet til variablene er vist. Gjør oppgave 2 side 137.

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 7 if-setningen har to former OBS! Likhet skrives med to likhetstegn. [logisk uttrykk][ikke (logisk uttrykk)] [logisk uttrykk] [ikke (logisk uttrykk)] if (logisk uttrykk) setning1 else setning2 if (logisk uttrykk) setning Et logisk uttrykk kan være en logisk variabel eller en sammenligning, eksempler: a > 10 antJenter < antGutter antMenn == antKvinner

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 8 Klammeparenteser og innrykk if (logisk uttrykk) setning1 else setning2 •Hvis setning1 og/eller setning2 består av mer enn en enkelt setning, må setningene omsluttes av klammeparenteser. •Dersom setning1 og/eller setning2 består av bare en enkelt setning, er det ikke nødvendig med klammeparenteser. Av sikkerhetsgrunner bør en bruke klammeparenteser uansett, også i dette tilfellet, dersom setningen ikke får plass på samme linje som if og/eller else. •Eksempel, vi har oppdaget at vi også skal øke b med 1 dersom a>b: •Utgangspunkt:Feilretting: if (a > b) sum += a; sum += a; b++; •Hvorfor blir ”feilrettingen” ikke riktig? •Tror du sjansen for å skrive riktig er større dersom utgangspunktet er: –if (a > b) sum += a;I tilfelle hvorfor? •Diskusjon / konklusjon? Gjør oppgave 2 side 140.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 9 Nøstet if og flervalgsetninger •Eksempel: if (temperatur > 0) { System.out.println(“Varmegrader”); } if (temperatur == 0) { System.out.println(“Null grader”); } if (temperatur < 0) { System.out.println(“Kuldegrader”); } •I visse tilfeller (når?) unødvendige tester. •Sparer unødvendige tester: if (temperatur > 0) { System.out.println(“Varmegrader”); } else { if (temperatur == 0) { System.out.println(“Null grader”); } else { System.out.println(“Kuldegrader”); } // slutt på innerste if-else-setning } // slutt på ytterste if-else-setning •Kan også skrive: if (temperatur > 0) System.out.println(“Varmegrader”); else if (temperatur == 0) System.out.println(“Null grader”); else System.out.println(“Kuldegrader”);

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 10 Hva er forskjellen mellom følgende to kodebiter? int a = -10; int b = 20; if (a > 0) { if (b > 10) b = 10; } else a = 0; System.out.println(a + " " + b); a = -10; b = 20; if (a > 0) if (b > 10) b = 10; else a = 0; System.out.println(a + " " + b); Dersom du bruker flere if-setninger inne i hverandre (nøstet if), og en else- blokk ikke tilhører den nærmeste if’en foran, må dette markeres med {}. Gjør oppgave 2 side 145.

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 11 Beslutningstabeller •En karakter på en prøve beregnes etter følgende beslutningstabell: poeng karakter 96-1001 86-952 71-853 46-704 0-455 •Oppgave: Skriv innholdet i metoden finnKarakter(): class Karakter { private int poeng; public Karakter(int startPoeng) { poeng = startPoeng; } public int finnKarakter() { // returnerer negativ verdi hvis ugyldig poengsum....fyll inn det som mangler her..... }

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 12 Logiske uttrykk •Et logisk uttrykk har verdien sann (true) eller usann (false). •Enkle logiske uttrykk lages ved å bruke sammenligningsoperatorene: <mindre enn <=mindre enn eller likEksempler: >større enn antKilo > 10 >=større enn eller lik(pris * antall) != 100 !=ikke liktall1 + tall2 == tall3 + tall4 ==lik •Sammensatte logiske uttrykk lages ved å sette sammen enkle logiske uttrykk ved hjelp av logiske operatorer: ! ikkeEksempler: &&ogantall > 30 && antall < 50 ||ellerantall = 50 •Se oversikt over operatorer, tabell side 147.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 13 Beregning av et komplisert logisk uttrykk a >= 0 && a = 10 && a <= 15 || a == 20 santusantsantusant a er lik 16 Gjør alle oppgavene på side 150.

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 14 Sammenligning av strenger •Klassen String tilbyr metoder for å sammenligne strenger. •To strenger er gitt: String navn1 = "Anne Beate"; String navn2 = "Unni"; •Vi bruker metoden equals(): if (navn1.equals(navn2)) System.out.println("Navnene er like."); else System.out.println("Navnene er ikke like."); •Utskrift: Navnene er ikke like. •Vi bruker metoden compareTo(): int resultat = navn1.compareTo(navn2); if (resultat < 0) System.out.println(navn1 + " kommer først."); else if (resultat > 0) System.out.println(navn2 + " kommer først."); else System.out.println("Navnene er like."); •Utskrift: Anne Beate kommer først.

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 15 Sammenligningsmetoder i klassen String •Klassen String tilbyr følgende metoder for sammenligning: –public int compareTo(String denAndreStrengen) –public boolean equals(Object detAndreObjektet) –public boolean equalsIgnoreCase(String denAndreStrengen) –public int compareToIgnoreCase(String denAndreStrengen) •Sammenligning skjer i henhold til Unicode-rekkefølgen. •compareTo()-metodene returnerer negativ verdi dersom strengen meldingen sendes til, ligger foran strengen som sendes inn som argument til metoden, positiv dersom den ligger etter, og 0 dersom de er like. •På grunn av æ, ø og å fungerer ikke compareTo()-metodene for norsk tekst. •De norske tegnene kan lukes ut og spesialbehandles med flervalg- setninger.

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 16 Forkortet beregning •Logiske uttrykk som inneholder && eller || beregnes ved å bruke teknikken ”forkortet beregning”. •Beregningen avsluttes så fort resultatet er bestemt. •Operatoren && (”og”) mellom uttrykkene: –Fortsett beregningen så lenge uttrykkene er sanne. –Beregningen avsluttes dersom et ikke-sant uttrykk påtreffes. •Operatoren || (”eller”) mellom uttrykkene: –Fortsett beregningen så lenge uttrykkene er usanne. –Beregningen avsluttes dersom et sant uttrykk påtreffes. •Eksempel: –if (tall >= 0 && Math.sqrt(tall) < grense).... •Rekkefølgen på sammenligningene kan ikke byttes om. Da risikerer vi å forsøke å beregne kvadratroten til et negativt tall.

17 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 17 switch-setningen int plassering = gui.lesHeltall("Medalje?", "Oppgi plassering: "); switch (plassering) { case 1: System.out.println("Det ble gull!"); break; case 2: System.out.println("Det ble sølv!"); break; case 3: System.out.println("Det ble bronse!"); break; case 4: /* ikke break */ case 5: /* ikke break */ case 6: System.out.println("Det ble poengplass!"); break; default: int lykketall = (int) (100 * Math.random() + 1); System.out.println("Takk for hederlig innsats!"); System.out.println("Du får et lykketall: " + lykketall); break; } •switch-setningen kan brukes dersom hvert tilfelle i en flervalg- setning svarer til en bestemt heltallsverdi eller et tegn. •Eksempel til høyre. •Hver enkelt case-etikett må representere forskjellige konstantuttrykk, kun ett uttrykk for hver etikett. Kan ikke oppgi intervaller eller flere enkeltverdier. •Bare uthopp dersom break påtreffes. Gjør oppgave side 153.

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2000. ISBN 82-417-1132-8. Kapittel 5, side 18 husk å kontrollere mot absoulttverdien! Å sammenligne beregnede desimaltallverdier •Hva blir verdien av tall3 etter at følgende kodebit er utført: double tall1 = 1.0e20; double tall2 = tall1 + 1.0; double tall3 = tall2 - tall1; •Svar: tall3 blir 0. •Hvorfor? –1 + 1,0·10 20 = 1,00000000000000000001·10 20. –Datatypen double klarer bare ca. 15 signifikante sifre. –Mister derfor verdien 1 som vi prøver å addere til det kjempestore tallet. •Bruk aldri operatorene == og != for å sammenligne resultater fra beregninger med desimaltall. •Kontroller heller at forskjellen mellom tallene er mindre enn en gitt toleranse: final double toleranse = 0.00001; // størrelsen i forhold til tallene som sammenlignes if (Math.abs(tall1 - tall2) < toleranse) System.out.println("Tallene er like nok"); else System.out.println("Tallene er å betrakte som forskjellige.");


Laste ned ppt "Programmering i Java versjon 2001-05-18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."

Liknende presentasjoner


Annonser fra Google