Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til.

Lignende præsentationer


Præsentationer af emnet: "GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."— Præsentationens transcript:

1 GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til at printe dem nu. www.itu.dk/courses/GP/E2005 Martin Lillholm

2 GP4, Martin Lillholm 2 Obligatorisk opgave Var opgaven til i onsdags 1.For nem 2.For svær 3.Tilpas 4.Er der nogen, der ikke har afleveret fordi den slet ikke var til at få hul på? Generelle kommentarer... … eventuelt til sidst i dagens forelæsning

3 GP4, Martin Lillholm 3 Eksamensdato? Baggrund Er den nogen der ikke kan fredag den 6. januar? Indtil videre er det stadig onsdag den 4. januar der gælder! Jeg vender tilbage med status.

4 GP4, Martin Lillholm 4 Sidste gang Klasser, objekter (instanser) Felter (instans data) Metoder, konstruktører (lidt om statiske metoder og felter) Indkapsling Objektvariable String, Random, Math og Scanner klasserne Formatteret udskrivning Frames, paneler (kursorisk)

5 GP4, Martin Lillholm 5 Scanner klassen igen Indlæsning af flere (eksempelvis) tal på en linie:

6 GP4, Martin Lillholm 6 Formattering af telefonnumre Opgave fra sidst: L&L Programming Project 3.4 23 00023 DecimalFormat fmt = new DecimalFormat("00000"); System.out.println(fmt.format(23));

7 GP4, Martin Lillholm 7 Beskrivelser af Javas klassebibliotek Beskrivelser af Javas Klassebibliotek –Appendix M –http://java.sun.com/j2se/1.5.0/docs/api/index.htmlhttp://java.sun.com/j2se/1.5.0/docs/api/index.html

8 GP4, Martin Lillholm 8 Hvad har vi sprunget over? Tidligere: –Det binære talsystem –Opremsningstyper (enumerated types) –Wrapper klasser og autoboxing –OO – den rigtig store tur –GUI – andet end grafik I dag: –Iteratorer (iterators) afsnit 5.6

9 GP4, Martin Lillholm 9 Denne gang Afviklingsrækkefølge igen (flow of control) Boolske (logiske) udtryk Sammenligningsoperatorer og logiske operatorer (Relational and logical operators) Betingede sætninger og sammenligning af data –if og switch sætninger Løkkekonstruktioner –for, do, while konstruktioner Programblokke (block statements) Grafik med løkker og betingede sætninger

10 GP4, Martin Lillholm 10 Hvor passer dagens pensum ind? Programafviklingen starter i main og arbejder sig ordre for ordre igennem main – programafviklingsrækkefølgen (flow of control) Metodekald afvikler først ordrene i metodekroppen, men fortsætter derefter i main (med forbehold for eventuelle indlejrede metodekald) – opgaveabstraktion. Betingede forgreninger Gentagelser ordre1 ordre2 ordre3 ordre4 ordre1 ordre2 hvis (betingelse) ordre3 // sand ordre 4 eks. 10 gange Benyttes i metodekroppe herunder main

11 GP4, Martin Lillholm 11 Logiske udtryk (boolean expressions) Logiske udtryk  sand ( true ) eller falsk ( false ) Er af typen boolean I modsætning til aritmetiske udstryk  1, 45.78 Er af typen integer, double,... Dannes normalt ved brug af sammenligningsoperatorer og logiske operatorer

12 GP4, Martin Lillholm 12 OperatorBetydningEksempel Større end x > 60 >=Større end eller lig med x >= 60 ==Lig med x == 60 !=Forskellig fra x != 60 Sammenligningsoperatorer (Relational operators) Argumenttyperne typisk integer, double, char (primitive typer) Resultattypen er boolean dvs. true eller false Binder svagere (har lavere præcedens) end de aritmetiske operatorer, >= binder stærkere end == og !=

13 GP4, Martin Lillholm 13 Logiske udtryk med sammenligningsoperatorer Eksempler ( x=2 og y=4 ): UdtrykVærdi false true true == falsefalse x != ytrue x < 3 + ytrue y < x + 3true (x + y > 3) == falsefalse false != x < 3true x == y == falsetrue

14 GP4, Martin Lillholm 14 Logiske operatorer (Logical operators) OperatorBetydningEksempel ! Ikke (negation, not) !(x == 60) && Og (konjunktion, and) 0<= x && x <= 60 || Eller (Disjunktion, or) x =60 Argumenttypen og resultattypen er boolean dvs. true eller false ! binder stærkere end && som binder stærkere end || ! binder også stærkere end sammenligningsoperatorerne og de aritmetiske operatorer && og || binder svagere end sammenligningsoperatorerne og de aritmetiske operatorer Hvis udtryk1 er falsk i udtryk1 && udtryk2 så udregnes udtryk2 ikke Hvis udtryk1 er sandt i udtryk1 || udtryk2 så udregnes udtryk2 ikke

15 GP4, Martin Lillholm 15 Logiske operatorer, sandhedstabeller x!x truefalse true xyx && yx || y false truefalsetrue false true

16 GP4, Martin Lillholm 16 Eksempler ( x=2 og y=4 ): Logiske udtryk med logiske operatorer UdtrykVærdi !falsetrue !truefalse !true == falsetrue !(true == false)true true && falsefalse false || truetrue (x + y > 3) && x < ytrue x + y == 3 || x < 4true x < y && (3*4 == 2*6-1*2+2) == !(3 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.dk/11/3194907/slides/slide_16.jpg", "name": "GP4, Martin Lillholm 16 Eksempler ( x=2 og y=4 ): Logiske udtryk med logiske operatorer UdtrykVærdi !falsetrue !truefalse !true == falsetrue !(true == false)true true && falsefalse false || truetrue (x + y > 3) && x < ytrue x + y == 3 || x < 4true x < y && (3*4 == 2*6-1*2+2) == !(3 3) && x < ytrue x + y == 3 || x < 4true x < y && (3*4 == 2*6-1*2+2) == !(3

17 GP4, Martin Lillholm 17 if ordren Benyttes til at påvirke programafviklingsrækkefølgen på baggrund af logiske udtryk Kan altså benyttes til træffe valg på baggrund af data –Er et tal større end et andet? –Ligger et tal i et vist interval eller udenfor? –Er to tegnstrenge ens? Benyttes typisk når vi vil –Reagere på data vi ikke kender når et program skrives –Indtastede tal, strenge mv. –Indlæsning fra fil –Tilfældige tal –... betingelse ordre(r) sand falsk

18 GP4, Martin Lillholm 18 if ordren – syntaks if ( udtryk ) ordre; if er et reserveret ord i Java Udtrykket skal være et logisk udtryk, som evaluerer til true eller false Hvis udtrykket er sandt (true) udføres ordre ellers springes ordre over

19 GP4, Martin Lillholm 19 if ordren – eksempler int a=5; if (a > 10) a = a – 5; System.out.println(”a er: ” + a); if (a>0 && a <=10) System.out.println(”a ligger i intervallet fra 1 til 10”); if (a 10) System.out.println(”a ligger udenfor intervallet fra 1 til 10”); if (a == 5) a = 3; if (a != 5) a = 5; if (a 10000) System.out.println(”a er negativt eller meget stort”);

20 GP4, Martin Lillholm 20 if ordren – eksempel Begrænsninger ? Enten eller... flere sætninger i ”sand-grenen”

21 GP4, Martin Lillholm 21 if-else ordren Syntaks (diagram side 210) if (udtryk) ordre1; else ordre2; Eksempler: if (level > MAX) System.out.println(”Level Critical!”); else System.out.printlnt(”Level ok”); if (a > b -.01 && a < b +.01) a = b; else System.out.println(”a is different from b”); betingelse ordre1 sandfalsk ordre2

22 GP4, Martin Lillholm 22 if-else – eksempel

23 GP4, Martin Lillholm 23 if-else – eksempel

24 GP4, Martin Lillholm 24 Ordrer i blokke (block statements) if (a > b) // swap a and b tmp = a; a = b; b = tmp; else a = a + 1; if (a > b) { // swap a and b tmp = a; a = b; b = tmp; } else a = a + 1; {... } bruges til at samle ordrer i blokke ligesom for klasser, konstruktører og metoder En blok kan benyttes, hvor vi eller ville benytte en enkelt ordre Indrykningen betyder rent logisk intet, men betyder meget for læseren!

25 GP4, Martin Lillholm 25 Ordrer i blokke - eksempel

26 GP4, Martin Lillholm 26 Indlejrede if ordrer – eksempel

27 GP4, Martin Lillholm 27 Indlejrede if ordrer – en faldgrube if (b < 0) if (a < b) System.out.println(”Både a og b er negative”); else System.out.println(”b er negativ”); if (b < 0) { if (a < b) System.out.println(”Både a og b er negative”); } else System.out.println(”b er negativ”); else binder altid til nærmeste ikke matchede if – NB {} ’er

28 GP4, Martin Lillholm 28 Sammenligning af data Heltalstyper ( integer, long, short, byte ) sammenlignes som hidtil. Decimaltalstyper ( float, double ) er stadig ikke præcise, derfor sammenlignes de inden for en valgt tolerance og ikke direkte med == final double TOLERANCE = 0.00001; if (Math.abs(f1-f2) < TOLERANCE) System.out.println(”f1 and f2 are approx. equal”); Tegntypen char sammenlignes vha. tegnets (bogstavets) Unicode: ’0’.. ’9’ < ’A’.. ’Z’ < ’a’... ’ z’ Men hvad med æøå og ÆØÅ (Appendix C side 674).

29 GP4, Martin Lillholm 29 Sammenligning af data (objekter) Vi kan tænke på strenge som en liste (fra venstre mod højre) af tegn og får dermed en naturlig ordning (leksikografisk orden) ”Martin” før ”anders”, ”have” før ”haveslange” Vi kan dog ikke bruge eksempelvis == og <= direkte equals og compareTo metoder i String klassen if (name1.equals(name2)) System.out.println (”The names are the same”); else System.out.println (”The names are not the same”); int result = nam1.compareTo(name2); if (result < 0) System.out.println(name1 + ” comes before ” + name2); else if (result == 0) System.out.println (”The name are the same”); else System.out.println (name1 + ” follows ” + name2);

30 GP4, Martin Lillholm 30 Sammenligning af data (objekter) Vi vender tilbage til sammenligning af objekter i almindelighed. Men == mellem objekter sammenligner referencerne!

31 GP4, Martin Lillholm 31 switch ordren Alternativ konstruktion til at vælge de(n) næste ordre der udføres På baggrund af et udtryk vælges en mulighed fra en given liste af mulige værdier eller måske en ’standard’ mulighed Programafviklingen fortsætter ved den mulighed der er lig med udtrykkets resultat switch (option) { case 'A': aCount++; break; case 'B': bCount++; break; case 'C': cCount++; break; default: System.out.println(”No match”); }

32 GP4, Martin Lillholm 32 switch ordren Betydningen af break Betydningen af default Implicitte blokke Udtrykket skal være en integral type: ( int, char eller (opremsningstype)) ”Indgangene” skal være konstanter Kan skrives ved hjælp af en række indlejrede if ordrer

33 GP4, Martin Lillholm 33 switch – eksempel

34 GP4, Martin Lillholm 34 while løkker Bruges til at gentage en ordre eller en blok 0 eller flere gange while (udtryk) (syntakdiagram L&L side 228) ordre; Hvis udtryk evalueres til true udføres ordre udtryk evalueres igen og hvis det evalueres til true udføres ordre igen Sådan fortsættes indtil udtryk evalueres til false int count = 1; while (count <= 5) { Sytem.out.println (count); count++; } logisk udtryk ordre sand falsk betingelse

35 GP4, Martin Lillholm 35 while løkker – eksempel

36 GP4, Martin Lillholm 36 while løkker – eksempel

37 GP4, Martin Lillholm 37 Uendelig uløkke int count = 1; while (count <= 25) { System.out.println (count); count = count - 1; } while (true) { System.out.println (”This will take a while...”); } int j = 0; while (j < 10) { j = j + 0; System.out.println(j); } double num = 1.0; while (num != 0.0) num = num – 0.1;

38 GP4, Martin Lillholm 38 Indlejrede løkker int count1, count2; count1 = 1; while (count1 <= 10) { count2 = 1; while (count2 <= 50) { System.out.println(”Here again”); count2++; } count1++; }

39 GP4, Martin Lillholm 39 Indlejrede løkker

40 GP4, Martin Lillholm 40 do løkker Minder meget om while løkker, men udføres altid mindst en gang do ordre; while (udtryk) Syntaksdiagram L&L side 243 int count = 0; do { count++; System.out.println(count); } while (count < 5); sand betingelse ordre falsk logisk udtryk

41 GP4, Martin Lillholm 41 do løkker – eksempel

42 GP4, Martin Lillholm 42 for løkker for ( initialisering ; betingelse ; forhøjelse ) ordre; Initialiseringen bliver udført en gang inden løkken begynder ordren udføres indtil betingelse bliver falsk “forhøjelse” udføres i slutningen af hver iteration

43 GP4, Martin Lillholm 43 for løkker statement true condition evaluated false increment initialization

44 GP4, Martin Lillholm 44 Eksempler på for løkker int i; for (i=0; i<10; i++) System.out.println(”i:” + i); for (int j=1; j<10; j++) System.out.println(”j:” + j); for (i=9; i >= 0; i--) { k = i + 2; System.out.println(”k:” + k); } –L&L Multiples.java ( side 248 ) –L&L Stars.java ( side 250 )

45 GP4, Martin Lillholm 45 Alle løkker kan det samme... while do for

46 GP4, Martin Lillholm 46 Gode råd om erklæringer og initialiseringer Erklær (altid) variable så lokalt så muligt Erklær (altid) variable tæt på hvor de bruges første gang Erklær eventuelle løkke-/tællevariable tæt på eller i selve løkkekonstruktionen ( for løkker).

47 GP4, Martin Lillholm 47 Grafik med løkker –Bullseye.java og BullseyePanel.java i BlueJ (L&L side 251-254) –Boxes.java (L&L side 255-257)

48 GP4, Martin Lillholm 48 Denne uges første opgave Tal i skuffen – L&L Programming Projects 5.8 Nogen ideer ?

49 GP4, Martin Lillholm 49 Mini-evaluering Kommentarer ?


Download ppt "GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder 9.15. Slides ligger på hjemmesiden. Du er velkommen til."

Lignende præsentationer


Annoncer fra Google