Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/boker/java/ versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5 Valg som kontrollstruktur Kontrollstrukturer side 2 Klassen Kalkulator med klientprogram side 3-6 Blokker inne i metoder side 7 if-setningen har to former side 8 Klammeparenteser og innrykk side 9 Nøstet if og flervalgsetninger side 10-12 Beslutningstabeller side 13 Logiske uttrykk side 14-16 Sammenligning av strenger side 17-19 Å sammenligne beregnede desimaltallverdier side 20 switch-setningen side 21

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. 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_INFINITY * eller Double.POSITIVE_INFINITY. * 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 5 Klientprogram med valg import static javax.swing.JOptionPane.*; class TestKalkulator1 { public static void main(String[] args) { /* Innlesing av data */ String tall1Lest = showInputDialog("Første tall: "); String tall2Lest = showInputDialog("Andre tall: "); double tall1 = Double.parseDouble(tall1Lest); double tall2 = Double.parseDouble(tall2Lest); int svar = showConfirmDialog(null, "Skal tallene legges sammen? ", "Kalkulator", YES_NO_OPTION); /* Beregning av resultater */ Kalkulator kalkus = new Kalkulator(tall1, tall2); double beregnetSvar; char operator; if (svar == YES_OPTION) { // Yes er trykket beregnetSvar = kalkus.beregnSum(); operator = '+'; } else { // No eller Esc er trykket, eller dialogen er lukket beregnetSvar = kalkus.beregnDifferanse(); operator = '-'; } /* Utskrift av resultater */ String resultat = "Vi beregner: " + kalkus.finnTall1() + " " + operator + " " + kalkus.finnTall2(); resultat += "\nSvaret er " + beregnetSvar; showMessageDialog(null, resultat); } valget må formuleres som et ja/nei-spørsmål

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 6 Dialogboksene i programmet foran showInputDialog("Første tall: "); showInputDialog("Andre tall: "); showConfirmDialog(null, "Skal tallene legges sammen? ", "Kalkulator", YES_NO_OPTION); showMessageDialog(null, resultat);

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 7 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 177.

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 8 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) setning1 Et logisk uttrykk kan være en logisk variabel eller en sammenligning, eksempler: a > 10 antJenter < antGutter antMenn == antKvinner

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 9 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 181.

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 10 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”);

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 11 Å gi brukeren valget mellom flere alternativer String[] muligheter = {"pluss", "minus", "gange", "dele"}; int valg = showOptionDialog(null, "Velg operator", "Fire regneoperasjoner", 0, PLAIN_MESSAGE, null, muligheter, muligheter[0]); Vis programliste 5.3, side 184.

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 12 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 187-188.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 13 Beslutningstabeller En karakter på en prøve beregnes etter følgende beslutningstabell: poeng karakter 96-100A 86-95B 71-85C 55-70D 36-54E 0-35F Oppgave: Skriv innholdet i metoden finnKarakter(): class Eksamensresultat { private int poeng; public Eksamensresultat(int startPoeng) { poeng = startPoeng; } public int finnPoeng() { return poeng; } public char finnKarakter() { // returnerer 'X' hvis ugyldig poengsum... fyll inn det som mangler her... }

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 14 Logiske uttrykk Et logisk uttrykk har verdien sann (true) eller usann (false). IKKE-operatoren ! snur verdien til uttrykket. (!true) er lik false (!false) er lik true Merk skrivemåten: if (funnetPerson)..... // slik, men ikke slik: if (finnetPerson == true).... if (!funnetBy).... // slik, men ikke slik: if (funnetBy == false)... Enkle logiske uttrykk lages ved å bruke sammenligningsoperatorene: <mindre enn <=mindre enn eller likEksempler: >større enn antKilo > 10 >=større enn eller lik !=ikke lik(pris * antall) != 100 ==liktall1 + tall2 == tall3 + tall4 instanceof klassetilhørighet person instanceof Student Sammensatte logiske uttrykk lages ved å sette sammen enkle logiske uttrykk ved hjelp av operatorene: &&ogantall > 30 && antall < 50 ||ellerantall = 50 Se oversikt over operatorer, tabell side 190.

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 15 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 192.

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 17 Sammenligning av strenger To strenger er gitt: String navn1 = "Anne Beate"; String navn2 = "Unni"; Uttrykket (navn1 == navn2) … sammenligner referansene. Likhet dersom referansene er like, det vil si dersom de peker til det samme objektet. Må bruke metoder for å sammenligne innholdet i objektene. Klassen String tilbyr metoder for å sammenligne strenger. 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.

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 18 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.

19 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 19 Råd og tips om strenger Dersom tekstene som skal sammenlignes leses inn fra brukeren, bør de “trimmes” før sammenligning, det vil si at blanke i begynnelsen og slutten av teksten fjernes: String navn = JOptionPane.showInputDialog("Navn: "); navn = navn.trim(); Vær obs på kompilatorens ”intelligens”. Studer følgende kodebit: String navn1 = "Ole Petter"; String navn2 = "Ole Petter"; // vi lager et objekt til, eller? if (navn1 == navn2) System.out.println("Likhet"); // prøver sammenligningsoperatoren else System.out.println("Ikke likhet"); Utskriften blir “Likhet”. Hvorfor? Årsaken er at Java-kompilatoren observerer at de to tekstene er like og derfor kun lager ett objekt. Gjør oppgaven side 194.

20 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 20 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.");

21 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 2004. Kapittel 5, side 21 switch-setningen... les inn plassering fra brukeren... 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 1 side 197.


Laste ned ppt "Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google