De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 6: Controle structuren.

Verwante presentaties


Presentatie over: "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 6: Controle structuren."— Transcript van de presentatie:

1 Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 6: Controle structuren

2 Inleiding Informatica Prof. Dr. O. De Troyer 2 Soms verschillende acties nodig afhankelijk van bepaalde condities Voorbeeld: –Auto’s met twee assen betalen 100fr tol de andere 200fr Als aantal assen = 2 dan tol = 100 anders tol = 200 conditie Actie indien conditie voldaan Actie indien conditie voldaan Actie indien Conditie niet voldaan Actie indien Conditie niet voldaan variabelen

3 Inleiding Informatica Prof. Dr. O. De Troyer 3 if statement Java if (assen == 2) tol = 100 ; else tol = 200 ; conditie Actie wordt enkel uit- gevoerd indien conditie waar is Actie wordt enkel uit- gevoerd indien conditie niet waar is Actie wordt enkel uit- gevoerd indien conditie niet waar is Sleutelwoorden

4 Inleiding Informatica Prof. Dr. O. De Troyer 4 conditie Statements uit te voeren als conditie true is true Statements uit te voeren als conditie false is false

5 Inleiding Informatica Prof. Dr. O. De Troyer 5 … assen = Integer.parseInt(br.readLine () ); if (assen == 2) tol = 100 ; else tol = 200 ; System.out.println( tol) ;... assen== 2 tol = 100 true tol = 200 false assen = Integer.parseInt(br.readLine () ); System.out.println( tol) ;

6 Inleiding Informatica Prof. Dr. O. De Troyer 6 if statement (2) Twee alternatieven: if (conditie) statement1 else statement2 Geen actie als conditie niet voldaan: if (conditie) statement

7 Inleiding Informatica Prof. Dr. O. De Troyer 7 If - eenvoudig voorbeeld uur = uur + 1; if (uur == 24) uur = 0 ; }

8 Inleiding Informatica Prof. Dr. O. De Troyer 8 if statement - meerdere statements Meer dan één statement if (x > y) { System.out.print(x) ; System.out.print(“ is groter dan “); System.out.print(y): } else { System.out.print(x) ; System.out.print(“ is niet groter dan “); System.out.print(y); } Samengesteld statement Samengesteld statement

9 Inleiding Informatica Prof. Dr. O. De Troyer 9 If - eenvoudig voorbeeld public void tik () {// methode in de klasse Tijdstip sec = sec + 1 ; if (sec == 60) { sec = 0 ; min = min + 1; } if (min == 60) { min = 0 ; uur = uur + 1 } if (uur == 24) uur = 0 ; }

10 Inleiding Informatica Prof. Dr. O. De Troyer 10 if statement - de conditie De conditie moet bij evaluatie true (waar) of false (onwaar) opleveren –Vb: vergelijking tussen getallen < kleiner dan vb: 8 < 10 of 20 < 10 > groter dan vb: 8 > 1 of x > 30 == gelijkvb: 8 == 1 of x == 30 <= kleiner of gelijk vb: 8 <= 10 of x <= y >= groter of gelijk vb: 8 >= 10 of x >= y != niet gelijk vb: 8 != 10 of x != y

11 Inleiding Informatica Prof. Dr. O. De Troyer 11 boolean type Primitief data type boolean –Twee waarde: true en false –Te gebruiken zoals andere typen Meer later

12 Inleiding Informatica Prof. Dr. O. De Troyer 12 if statement - meerdere gevallen Vb. 3 gevallen: –Uren <= 40 –Uren > 40 en <= 60 –Uren > 60 if (uren <= 40) System.out.print(“Geen overuren”) ; else if (hours <= 60) System.out.print(“ Overuren“); else System.out.print(“Dubbele overuren); Cascade if/else

13 Inleiding Informatica Prof. Dr. O. De Troyer 13 Cascade if statement Alternative notatie: if (uren <= 40) System.out.print(“Geen overuren”) ; else if (hours <= 60) System.out.print(“ Overuren“); else System.out.print(“Dubbele overuren);

14 Inleiding Informatica Prof. Dr. O. De Troyer 14 Genestelde if statements if (uren 40) System.out.print(“ Overuren“); else System.out.print(“Geen overuren); else System.out.print(“Dubbele overuren); Genestelde if/else

15 Inleiding Informatica Prof. Dr. O. De Troyer 15 Genestelde if statements (2) Opgelet if (uren 40) System.out.print(“ Overuren“); } else System.out.print(“Dubbele overuren);

16 Inleiding Informatica Prof. Dr. O. De Troyer 16 Meer over het boolean type Boolean variabelen boolean isKoud ; if (temp < 5) isKoud = true ; else isKoud = false; if (isKoud) System.out.println(“Brrrrrr!”) ;

17 Inleiding Informatica Prof. Dr. O. De Troyer 17 Meer over het boolean type (2) Predicaat methode –Methode die een boolean waarde terug geeft –Te gebruiken als conditie –Vb: public boolean equals (Name n) { … } if (name1.equals(name2)) System.out.println (“namen zijn gelijk”); else System.out.println (“namen zijn gelijk”);

18 Inleiding Informatica Prof. Dr. O. De Troyer 18 Meer over het boolean type (3) Boolean expressies –Waarde is een boolean –Vb: temp < 5 public boolean Koud (Int temp ) { return (temp < 5) ; }

19 Inleiding Informatica Prof. Dr. O. De Troyer 19 Logische operatoren expressie && expressie –logische “and” –True als beide expressies true zijn –Vb: (uur == 12) && (min == 10)

20 Inleiding Informatica Prof. Dr. O. De Troyer 20 Logische operatoren (2) expressie || expressie –logische “or” –True als één van beide expressies true is –Vb: (uur == 12 ) || (uur == 10)

21 Inleiding Informatica Prof. Dr. O. De Troyer 21 Logische operatoren (3) ! expressie –logische “not” –True als de expressie false is –Vb: ! ( uur == 12)

22 Inleiding Informatica Prof. Dr. O. De Troyer 22 Voorrangsregels voor logische operatoren Van hoogste naar laagste prioriteit ! && || Gebruik bij voorkeur haakjes –If uur < 12 || min == 60 && sec == 60 –If (uur < 12 ) || (min == 60 && sec == 60)

23 Inleiding Informatica Prof. Dr. O. De Troyer 23 Evaluatie van logische expressies Evaluatie gebeurt van links naar rechts en stop indien resultaat gekend is (x != 0) && ( (y/x) > 10 ) –Indien x = 0 is expressie false en (y/x) > 10 wordt niet meer uitgevoerd

24 Inleiding Informatica Prof. Dr. O. De Troyer 24 Logische operatoren en if-statements if (conditie1) if (conditie2) statement if (conditie1 && conditie2) statement if (conditie1) statement else if (conditie2) statement if (conditie1 || conditie2) statement Zijn equivalent

25 Inleiding Informatica Prof. Dr. O. De Troyer 25 Voorbeeld Ontwerp een klasse voor het manipuleren van tijdstippen binnen een periode van 24-uren. Uren en minuten zijn voldoende. We willen de am/pm notatie gebruiken class Time

26 Inleiding Informatica Prof. Dr. O. De Troyer 26 Time vb - Bepaal het gedrag We willen het volgende gedrag –Maak een nieuw tijdstip aan –Ga na of het tijdstip vóór een gegeven tijdstip valt –Ga na of het tijdstip na een gegeven tijdstip valt –Maak een nieuw tijdstip door een tijdsperiode toe te voegen aan een tijdstip –Druk het tijdstip af op een PrintStream

27 Inleiding Informatica Prof. Dr. O. De Troyer 27 Time vb - Bepaal de interface –Class name: Time –Constructor: Vb: Time t1 = new Time(10, 15, “am”);  public Time(int hours, int minutes, String amOrPm) –Test of vóór een bepaald tijdstip : Vb: t1.isBefore(t2)  public boolean isBefore( Time t) –Test of na een bepaald tijdstip : Vb: t1.isAfter(t2)  public boolean isAfter( Time t)

28 Inleiding Informatica Prof. Dr. O. De Troyer 28 Time vb - Bepaal de interface (2) –Afdrukken van een tijdstip: Vb: t1.print(System.out) ;  public void print( PrintStream ps) –Nieuw tijdstip door toevoegen van een tijdsduur aan een tijdstip: Vb: t3 = t1.addDuration(30) ; t4 = t1.addDuration(3, 30) ;  public Time AddDuration( int minutes)  public Time AddDuration( int hours, int minutes)

29 Inleiding Informatica Prof. Dr. O. De Troyer 29 Time vb - Een vb-programma import java.io.*; class TryTime { public static void main(String[] arg) { Time t1= new Time(10, 15, “am”); Time t2= new Time(3, 10, “pm”); Time t3= t2.addDuration(30);//voeg 30 minuten toe t3.print(System.out) ; System.out.println() ; Time t4= t2.addDuration(3, 30);//voeg 3 uur en 30 minuten toe t4.print(System.out) ; System.out.println() ;

30 Inleiding Informatica Prof. Dr. O. De Troyer 30 Time vb - Een vb-programma (rest) Time ealier, later ; if (t3.isBefore(t4) ) { earlier = t3; later = t4: } else { earlier = t4; later = t3: } earlier.print(System.out) ; System.out.print(“ is eerder dan “) ; later.print(System.out) ; System.out.println() ; }

31 Inleiding Informatica Prof. Dr. O. De Troyer 31 Time vb - Klasse skelet class Time { public Time( int hours, int minutes, String amOrPm) { statements } // is eerder public boolean isBefore(Time t) { statements } // is later public boolean isAfter(Time t) { statements } // schrijf naar een PrintStream; public void print(PrintStream ps) { statements }

32 Inleiding Informatica Prof. Dr. O. De Troyer 32 Time vb - Klasse skelet (2) // voeg minuten toe; public Time addDuration(int minuten) { statements } // voeg uren en minuten toe; public Time addDuration(int hours, int minuten) { statements } instantie variabelen indien nodig }

33 Inleiding Informatica Prof. Dr. O. De Troyer 33 Time vb - De instantie variabelen We kiezen om de tijd uit te drukken als het totaal aantal minuten na middernacht (12.00 am) –Vb 1: 3.20 am = 3 x 60 min + 20 min = 200 min –Vb 2: 3.20 pm = (12 + 3) x 60 min + 20 min = 920 min Class Time { // instantie variabelen private int totalMinutes ;... }

34 Inleiding Informatica Prof. Dr. O. De Troyer 34 Time vb - Implementatie De methode isBefore public boolean isBefore(Time t) { if ( this.totalMinutes < t.totalMinutes ) return true; else return false } of nog public boolean isBefore(Time t) { return this.totalMinutes < t.totalMinutes ; } De methode isAfter public boolean isBefore(Time t) { return this.totalMinutes > t.totalMinutes ; }

35 Inleiding Informatica Prof. Dr. O. De Troyer 35 Time vb - Implementatie (2) De constructor Time public Time (int hours, int minutes, String amOrPm) { if ( amOrPm.equals(“am”) ) { if (hours == 12 ) hours = 0 ; } else // pm if (hours != 12) hours += 12 ; totalMinutes = hours * 60 + minutes ; } 12 am 1 am 12 pm1 pm Uren sinds middernacht is 0Uren te vermeerderen met 12 Uren wijzigen niet

36 Inleiding Informatica Prof. Dr. O. De Troyer 36 Time vb - Implementatie (3) De methode print –Hier moeten we totaal aantal minuten terug omzetten naar uren en minuten –Stap 1: uren int hours = this.totalMinutes / 60 ; –Stap 2: namiddag (uren >= 12) ? Ja, -12 uur Neen, O wordt 12 am if (hours > 12) { isAfternoon = true ; if (hours > 12) hours -= 12 ; } else { isAfternoon = false ; if (hours == 0) hours = 12 ; // 12 am }

37 Inleiding Informatica Prof. Dr. O. De Troyer 37 Time vb - Implementatie print De methode print public void print (PrintStrean ps) { int hours = this.totalMinutes / 60 ; boolean isAfternoon ; if (hours >= 12) { isAfternoon = true ; if (hours > 12) //12 blijft 12 pm hours -= 12 ; //13 wordt 1pm, 14 wordt 2pm, …. } else { isAfternoon = false ; if (hours == 0) hours = 12 ; // 12 am } ps.print(hours + “:” + totalMinutes%60) ; if (isAfternoon) ps.print(“ pm”); else ps.print(“ am”); }

38 Inleiding Informatica Prof. Dr. O. De Troyer 38 Time vb - Implementatie (4) De methode addDuration –Nieuw tijdstip door de gegeven minuten bij het totaal aantal van het tijdstip op te tellen (niet altijd correct - wanneer niet?) –Echter dan constructor nodig die werkt met totaal aantal minuten private Time (int minutes) { this.totalMinutes = minutes ; } public Time addDuration (int minutes) { return new Time( this.totalMinutes + minutes) ; } public Time addDuration (int hours, int minutes) { return new Time( hours* 60 + minutes + this.totalMinutes) ; }

39 Inleiding Informatica Prof. Dr. O. De Troyer 39 Herhalingen

40 Inleiding Informatica Prof. Dr. O. De Troyer 40 Soms willen we bepaalde acties een aantal keer herhalen Voorbeeld: –Bereken het salaris voor alle werknemer. Zolang er nog een werknemer is doe bereken zijn salaris conditie Acties uit te voeren zolang de conditie voldaan is

41 Inleiding Informatica Prof. Dr. O. De Troyer 41 conditie Statements uit te voeren als conditie true is true false

42 Inleiding Informatica Prof. Dr. O. De Troyer 42 while statement Java while (conditie) body –De conditie is een boolean expressie –Body is een statement of een samengesteld statement Uitvoering 1. De conditie wordt getest 2. Als de conditie false is stop de uitvoering 3. Als de conditie true is wordt body uitgevoerd en wordt vanaf 1 alles herhaald.

43 Inleiding Informatica Prof. Dr. O. De Troyer 43 while statement - voorbeeld Veronderstel klasse Werknemer met methoden leesIn, geefNaam, geefUren, geefSalPerUur Werknemer w = Werknemer.leesIn(); while (w != null) { System.out.println(“Werknemer “ + w.geefNaam() + “ verdient “ + (w.geefUren() * w.geefSalPerUur()); w = Werknemer.leesIn () ; } Lees de gegevens van de eerste werknemer Lees de gegevens van de eerste werknemer Test of er een werknemer is Lees de gegevens van de volgende werknemer Lees de gegevens van de volgende werknemer

44 Inleiding Informatica Prof. Dr. O. De Troyer 44 while statement - voorbeelden Verkeerde code Werknemer w ; while (w != null) { w = Werknemer.leesIn(); System.out.println(“Werknemer “ + w.geefNaam() + “ verdient “ + (w.geefUren() * w.geefSalPerUur()); } Werknemer w = Werknemer.leesIn(); while (w != null) { System.out.println(“Werknemer “ + w.geefNaam() + “ verdient “ + (w.geefUren() * w.geefSalPerUur()); } Stop nooit indien eerste w niet null ! w heeft geen waarde de eerste keer!

45 Inleiding Informatica Prof. Dr. O. De Troyer 45 while statement - Lees/verwerk patroon lees eerste item while (een geldig item is gelezen) { verwerk het item lees het volgende item }

46 Inleiding Informatica Prof. Dr. O. De Troyer 46 Voorbeeld Bereken x Y x Y = 1 * x * x * … * x (y keer) Of nog resultaat = 1 resultaat = resultaat * x Herhaal y keer Of nog resultaat = 1 teller = 0 ; tot zolang (teller != y) doe resultaat = resultaat * x teller = teller + 1

47 Inleiding Informatica Prof. Dr. O. De Troyer 47 Voorbeeld (2) private int mijnMacht( int x, int y) { int teller, //telt het aantal vermenigvuldigingen resultaat ; //houdt het tussentijdse resultaat van de // vermenigvuldigingen bij resultaat = 1 ; teller = 0 ; while (teller != y) { resultaat *= x ; teller ++ ; } return resultaat ; } Zet de beginwaarde voor de conditie Zorgt er voor dat de conditie uiteindelijk false zal worden Zorgt er voor dat de conditie uiteindelijk false zal worden Geeft beginwaarde aan variabele gebruikt in de loop Zorgt uiteindelijk voor het resultaat

48 Inleiding Informatica Prof. Dr. O. De Troyer 48 while statement - Algemeen patroon Geef begin waarde aan de conditie while (conditie) { statements wijzig de conditie (zodat conditie uiteindelijk false wordt) }

49 Inleiding Informatica Prof. Dr. O. De Troyer 49 while statement - “De tel-lus” patroon Een aantal keer iets herhalen int teller = 0; // teller begint bij 0 … while (teller != aantal) {... teller++; }

50 Inleiding Informatica Prof. Dr. O. De Troyer 50 while statement - “De teller” patroon Tellen van bepaalde objecten int teller = 0 ; // teller begint bij 0 … while (conditie) {... if (dit moeten we tellen) teller++; }

51 Inleiding Informatica Prof. Dr. O. De Troyer 51 Andere herhalingspatronen De “accumulator” patroon “Het meest extreem object” patroon “De meest extreme waarde” patroon Zie later

52 Inleiding Informatica Prof. Dr. O. De Troyer 52 for statement Alternatief voor de while -statement voor een “tel-lus” for ( initialisatie toekenningen; conditie ; increment) body Is equivalent met initialisatie toekenningen; while (conditie) { body increment; }

53 Inleiding Informatica Prof. Dr. O. De Troyer 53 for statement - voorbeeld 1 for ( initialisatie toekenningen; conditie ; increment) body Voorbeeld 1: som van 0 tot 100 for ( i = 0, som = 0 ; i <100 ; i ++) som += i ; Is equivalent met i = 0; som = 0; while (i <100 ) { som += i ; i ++; }

54 Inleiding Informatica Prof. Dr. O. De Troyer 54 for statement - voorbeeld 2 for ( initialisatie toekenningen; conditie ; increment) body Voorbeeld 2: 10 eerste machten van 2 for ( i = 0, macht = 1 ; i <10 ; i ++, macht *= 2) System.out.println( “2 tot de macht “ + i + “ is “+ macht); Is equivalent met i = 0; macht = 1; while (i <10 ) { System.out.println( “2 tot de macht “ + i + “ is “+ macht); i ++; macht *= 2; }

55 Inleiding Informatica Prof. Dr. O. De Troyer 55 do statement Alternatief voor de while -statement do { body} while conditie; Uitvoering 1. De body wordt uitgevoerd 2. Conditie wordt getest 3. Als de conditie false is stop de uitvoering 4. Als de conditie true is wordt vanaf 1 alles herhaald Gevolg: body wordt minstens één keer uitgevoerd

56 Inleiding Informatica Prof. Dr. O. De Troyer 56 do statement - voorbeeld 1 Voorbeeld : som van 0 tot 100 i = 0; som = 0; do { som += i ; i ++; } while ( i <100 ) ;

57 Inleiding Informatica Prof. Dr. O. De Troyer 57 do statement - voorbeeld 2 Voorbeeld : som van 0 tot j (variabele) i = 0; som = 0; do { som += i ; i ++; } while ( i < j ) ; i = 0; som = 0; while (i

58 Inleiding Informatica Prof. Dr. O. De Troyer 58 Switch statement Een cascade if van de vorm if (x == waarde1) statement1 else if (x == waarde2) statement2 else if (x == waarde3) statement3 else statement4 kan men vervangen door een switch switch (x) { case waarde1 : statement1 break; case waarde2 : statement2 break; case waarde3 : statement3 break; default: statement4 break; }

59 Inleiding Informatica Prof. Dr. O. De Troyer 59 Switch statement (2) switch (x) { case waarde1 : statement1 break; case waarde2 : statement2 break; case waarde3 : statement3 break; default: statement4 break; } De case-waarden moeten constanten of literals zijn { } is niet nodig voor samengestelde statements Default case is niet verplicht –Indien niet aanwezig en geen overeenstemmende waarde dan geen actie Break is noodzakelijk om te verhinderen dat ook de volgende case-statements worden uitgevoerd.

60 Inleiding Informatica Prof. Dr. O. De Troyer 60 Switch statement - voorbeeld public String naamDag (int d) { String naam; switch (d) { case 1 : naam = “Zondag” ; break; case 2 : naam = “Maandag” ; break; case 3 : naam = “Dinsdag” ; break; case 4 : naam = “Woesdag” ; break; case 5 : naam = “Donderdag” ; break; case 6 : naam = “Vrijdag” ; break; case 7 : naam = “Zaterdag” ; break; default: naam = “Onbekende dag” ; break; } return naam ; }

61 Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 7: Objecten organiseren

62 Inleiding Informatica Prof. Dr. O. De Troyer 62 Collecties Een collectie is een groepering van objecten Een collectie is een object Java ondersteund verschillende soorten collecties, vb lijsten, verzamelingen –Verschillende klassen Mogelijkheden met collecties –Nieuwe collectie maken –Object aan een collectie toevoegen –De objecten in een collectie doorlopen

63 Inleiding Informatica Prof. Dr. O. De Troyer 63 De klasse Vector Opeenvolging van objecten Grootte past zich automatische aan Voorbeeld Vector v ; v Vector object v = new Vector() ; String s; s = br.readline() ; while (s != null) { v.addElement(s) ; s = br.readline() ; }

64 Inleiding Informatica Prof. Dr. O. De Troyer 64 De klasse Vector - voorbeeld We willen een cijferlijst bijhouden voor een vak en voor elke student zijn cijfer vergelijken met het klas gemiddelde voor dat vak –Klasse Cijferlijst –Klasse Student

65 Inleiding Informatica Prof. Dr. O. De Troyer 65 De klasse CijferLijst Gedrag –Construeer de cijferlijst, de gegevens bevinden zich op een bestand public CijferLijst(String bestandsNaam) –Evalueer de studenten in de cijferlijst public void Evaluate() Instantie variabelen –Vector voor de gegevens van de studenten –Klas-gemiddelde

66 Inleiding Informatica Prof. Dr. O. De Troyer 66 CijferLijst vb - Klasse skelet class CijferLijst{ // instantie variabele private Vector students; private int klasGemiddelde ; public CijferLijst( String bestandsNaam ) { statements } public void Evaluate() { statements }

67 Inleiding Informatica Prof. Dr. O. De Troyer 67 CijferLijst vb - Implementatie (1) Eerste Versie class CijferLijst{ public CijferLijst( String bestandsNaam ) throws IOException { students = new Vector() ; BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( bestandsNaam))); Student student = Student.read(br) ; while (student != null) { students.addElement(student) ; student = Student.read(br) ; } } … } We moeten echter ook het klas-gemiddelde berekenen. kan tegelijk met het inlezen

68 Inleiding Informatica Prof. Dr. O. De Troyer 68 CijferLijst vb - Implementatie (2) Tweede Versie public CijferLijst( String bestandsNaam ) throws IOException { students = new Vector() ; int totaal = 0 ; int aantal = 0 ; BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( bestandsNaam))); Student student = Student.read(br) ; while (student != null) { students.addElement(student) ; totaal += student.getCijfer () ; aantal ++ ; student = Student.read(br) ; } klasGemiddelde = totaal / aantal ; }

69 Inleiding Informatica Prof. Dr. O. De Troyer 69 Voorbeeld Vector v = new Vector () ; int i = 0; while (i < 3) { v.addElement(new Integer(i)) ; i++ ; } De klasse Vector - beperkingen Een Vector is een collectie van objecten –Primitieve data typen waarden kunnen niet rechtstreeks als elementen in een vector Wel via de enveloppe klasse Integer-waarde eerst omzetten naar Integer- object

70 Inleiding Informatica Prof. Dr. O. De Troyer 70 De klasse Vector - posities Elk element bevindt zich op een welbepaalde positie (ook index genoemd) Nummering van de posities begint bij 0 Vector object positie 0 positie 1 positie 2 positie 3 Methode elementAt (int index) Geeft het element (als Object!) via zijn positie Grootte van de vector op te vragen door de methode size() ( = index van laatste element + 1)

71 Inleiding Informatica Prof. Dr. O. De Troyer 71 De elementen van een Vector Een Vector is een collectie van objecten –Elk element wordt in een vector opgeslagen als een algemeen object. –De methode elementAt (int index) geeft dan ook een algemeen object terug Omzetting naar het juiste type (conversie) kan soms nodig zijn Voorbeeld Student student = (Student) students.elementAt(k) ; Conversie Algemeen object

72 Inleiding Informatica Prof. Dr. O. De Troyer 72 Elementen van een collectie opvragen Patroon while (nog elementen) { x = volgende element; verwerk x ; } Patroon while (nog elementen) { x = volgende element; verwerk x ; } int k = 0 ; while (k < v.size() ) { System.out.println (v.elementAt (k) ) ; k++ ; } k duidt het volgende af te drukken element aan Voorbeeld: afdrukken van alle elementen

73 Inleiding Informatica Prof. Dr. O. De Troyer 73 int k = 0 ; while (k < v.size() ) { System.out.println (v.elementAt (k) ) ; k++ ; } v.size() - 1 v.size() -2 v k Reeds afgedruktNog af te drukken k duidt het volgende af te drukken element aan v.size() - 1 v.size() -2 v k Nog af te drukken v.size() - 1 v.size() -2 v 1 0 v.size() k Reeds afgedrukt

74 Inleiding Informatica Prof. Dr. O. De Troyer 74 CijferLijst vb - Implementatie van Evaluate public void Evaluate() { Student student ; int k = 0 ; while ( k < students.size() ) { student = (Student) students.elementAt(k) ; System.out.print (student.getNaam()); System.out.print (“ is “); if (student.getCijfer() >= klasGemiddelde) System.out.println(“beter dan het gemiddelde”); else System.out.println(“slechter dan het gemiddelde”); k++ ; } }

75 Inleiding Informatica Prof. Dr. O. De Troyer 75 CijferLijst vb - voorbeeld programma class TryCijferLijst { public static void main (String[ ] args) throws IOException { CijferLijst lijst = new CijferLijst(“test”); lijst.evaluate () ; }

76 Inleiding Informatica Prof. Dr. O. De Troyer 76 Voorbeeld - werken met posities Druk de elementen van een vector af in omgekeerde volgorde v.size() - 1 v.size() -2 v k Nog af te drukkenReeds afgedrukt int k ; // volgend af te drukken element k = v.size() -1 ;// achteraan beginnen while (k != -1) { System.out.println(v.elementAt(k)) ; k--; }

77 Inleiding Informatica Prof. Dr. O. De Troyer 77 De klasse Vector - posities (2) Methode insertElementAt( Object o, int i) –Alle elementen vanaf positie worden 1 positie verschoven –plaatst het object o op positie i v.size() - 1 v 1 0 i A A voor B B C C Z Z Na v.insertElementAt(o,i) i v 1 0 A A B B C C Z Z o o

78 Inleiding Informatica Prof. Dr. O. De Troyer 78 De klasse Vector - posities (3) Methode removeElementAt( int i) –verwijdert het element op positie i –Alle elementen vanaf positie worden 1 positie terug geschoven v 1 0 i A A Na v.removeElementAt(i) B B C C Z Z i 9 v 1 0 voor o o A A B B C C Z Z

79 Inleiding Informatica Prof. Dr. O. De Troyer 79 De klasse Vector - zoeken Ga na of een bepaald object voorkomt in een vector. Veronderstel dat de objecten strings zijn Eenvoudige werkwijze –Check elk element één voor één, als element gevonden is stop dan Wordt sequentieel zoeken genoemd

80 Inleiding Informatica Prof. Dr. O. De Troyer 80 Voorbeeld - zoeken (2) s te zoeken string (parameter) k is de positie van het volgende te checken elementen v.size() - 1 v.size() -2 v k Reeds gechecktNog te checken int k ; // index van volgende te checken element k = 0 ;// vooraan beginnen while (nog elementen) en niet (element op positie k is gelijk aan s) { k++;// zoek verder } if geen elementen meer return -1 // betekent: niets gevonden else return k ;// index van gevonden element

81 Inleiding Informatica Prof. Dr. O. De Troyer 81 Voorbeeld - zoeken (3) private int search ( String s) { int k ; // index van volgende te checken element k = 0 ;// vooraan beginnen while ( (k < v.size()) && ! (s.equals((String)v.elementAt(k))) ) { k++; } if (k == v.size()) return -1 else return k ; } int k ; // index van volgende te checken element k = 0 ;// vooraan beginnen while (nog elementen) en niet (element op positie k is gelijk aan s) { k++; } if geen elementen meer return -1 // betekent: niets gevonden else return k ;// index van gevonden element

82 Inleiding Informatica Prof. Dr. O. De Troyer 82 voorbeeld - “Het meest extreem object” patroon Student beste Student = null; // variabele om het meest extreme object bij te // houden dat tot zover gevonden werd beste Student = null; // nog geen extreem gevonden Student student; //variabele om element per element te testen int k = 0 ;//eerste element while ( k < students.size() ) { student = (Student) students.elementAt(k) ; if (besteStudent == null) || (student.getCijfer() > besteStudent.getCijfer()) besteStudent = student ; k++ ;//volgend element } Het “extreem” object vinden in een groep van objecten. –Vb: student met hoogste cijfer

83 Inleiding Informatica Prof. Dr. O. De Troyer 83 while statement - “Het meest extreem object” patroon eenType extreem ; // variabele om het meest extreme object bij te // houden dat tot zover gevonden werd extreem = null ;//nog geen exterm object gevonden element = eerste element; while (nog element) {... if (extreem == null) || element is meer extreem dan extreem extreem = element element = volgende element }

84 Inleiding Informatica Prof. Dr. O. De Troyer 84 Array Lijkt op een vector –Sequentie van posities (index eerste positie is 0) –Is een zelf ook een object Maar: –Er is geen klasse voor Er zijn dus ook geen methoden voor arrays; wel ingebouwde symbolen –Elementen van een array kunnen primitieve data typen bevatten –Alle elementen van een array moeten van het zelfde type zijn (gegeven bij declaratie) –Een array kan niet groeien

85 Inleiding Informatica Prof. Dr. O. De Troyer 85 Array’s declareren Declareren van een referentie variabele voor een array type [ ] naam vben: int [ ] nummers ; String [ ] woorden ; Name [ ] namen ; Opgelet: Er wordt hierdoor geen array gemaakt, alleen een variabele om naar de array te verwijzen !

86 Inleiding Informatica Prof. Dr. O. De Troyer 86 Array’s maken new type [ integer-waarde ] integer-waarde specificeert het aantal elementen in de array vb: nummers = new int [6] ; Nummers is een array die 6 integers kan bevatten Nummers

87 Inleiding Informatica Prof. Dr. O. De Troyer 87 Array’s manipuleren array-variabele.length geeft de grootte van de array (= het aantal elementen dat de array kan bevatten) vb: nummers = new int [6] ; nummers.length 6

88 Inleiding Informatica Prof. Dr. O. De Troyer 88 Array’s manipuleren (2) Een waarde toekennen aan een element van een array array-variabele[ index ] = waarde type van array en van waarde moeten overeenkomen vb: nummers = new int [6] ; nummers[1] = 10 ; Array-elementen te gebruiken zoals variabelen vb: nummers = new int [6] ; nummers[1] = 10 ; nummers[2] = nummers[1] * 2 ;

89 Inleiding Informatica Prof. Dr. O. De Troyer 89 Array’s - voorbeeld Lees 100 integers, elke integer is op een aparte lijn Druk de integers af in omgekeerde volgorde. Elke integer op een aparte lijn.

90 Inleiding Informatica Prof. Dr. O. De Troyer 90 Array’s - voorbeeld (2) import java.io.* ; class LeesEnDrukAf { public static void main( String[ ] arg) throws IOException { BufferedReader kb = new BufferedReader ( new InputStreamReader (System.in)) ; int [ ] z = new int [100] ; // array z voor 100 integers int i = 0 ;// i is volgende positie in array die men //gaat vullen //inlezen van de 100 integers while (i < 100) { z[i] = Integer.parseInt(kb.readLine ()) ; i ++ ; }

91 Inleiding Informatica Prof. Dr. O. De Troyer 91 Array’s - voorbeeld (3) //afdrukken van de 100 integers in omgekeerde volgorde i = 99 ;// laatste positie in array is 99 while (i > -1) { System.out.println( z[i] ) ; i -- ; } }

92 Inleiding Informatica Prof. Dr. O. De Troyer 92 Voorbeeld - “De meest extreme waarde” patroon int kleinste ; // variabele om het de kleinste waarde bij te // houden dat tot zover gevonden werd boolean gevonden = false;//nog geen kleinste waarde gevonden int i = 0; while (i < z.length) { if (! gevonden ) || (z[i] < kleinste ) { kleinste = z[i] ; gevonden= true; } i ++ ; } De meest “extreme” waarde vinden in een groep van primitieve waarden. –Vb: kleinste getal uit een array

93 Inleiding Informatica Prof. Dr. O. De Troyer 93 while statement - “De meest extreme waarde” patroon eenType extreem ; // variabele om het meest extreme waarde bij te // houden dat tot zover gevonden werd boolean gevonden = false ;//nog geen extreme waarde gevonden waarde = eerste waarde; … while (nog waarde) {... if (! gevonden ) || waarde is meer extreem dan extreem { extreem = waarde ; gevonden= true; } waarde = volgende waarde }

94 Inleiding Informatica Prof. Dr. O. De Troyer 94 Voorbeeld - “Accumulator” patroon getallen uit een array optellen: int som ; som = 0 ;//beginwaarde van som int i = 0; // eerste element while (i < z.length) { som = som +z[i] ; i++; // volgende getal } Een binaire operator toepassen op een groep objecten of waarden (elementen) –Vb 1: een groep getallen optellen –Vb 2: een groep van strings aan elkaar plakken

95 Inleiding Informatica Prof. Dr. O. De Troyer 95 while statement - “Accumulator” patroon eenType accumulator ; accumulator = beginwaarde ;//beginwaarde afhankelijk van type operator element = eerste element; while (nog element) { accumulator = accumulator operator element element = volgende element }

96 Inleiding Informatica Prof. Dr. O. De Troyer 96 Verschil tussen vectors en array’s Voordelen array’s: –Elementen kunnen primitive data waarden zijn –laten type checking toe –Eenvoudig in gebruik (geen methoden nodig) Nadelen array’s –Vaste grootte –Niet zo een rijke verzameling operaties zoals methoden bij Vector

97 Inleiding Informatica Prof. Dr. O. De Troyer 97 De argumenten van de commando-lijn public static void main( String[ ] arg) Array van Strings De argumenten op de commando lijn laten toe om informatie aan het programma door te geven zijn een soort van parameters kunnen enkel strings zijn

98 Inleiding Informatica Prof. Dr. O. De Troyer 98 De argumenten van de commando-lijn (2) Voorbeeld import java.io.* ; class CopyFile { public static void main( String[ ] arg) throws IOException { BufferedReader in = new BufferedReader ( new InputStreamReader ( new FileInputStream( new File (arg[0]) ))) ; PrintStream out = new PrintStream ( new FileOutputStream ( new File (arg[1]) )) ; String s = in.readLine() ; while (s != null) { out.println(s) ; s = in.readLine() ; } Naam input file Naam output file Via de argumenten van de commado-lijn

99 Inleiding Informatica Prof. Dr. O. De Troyer 99 De argumenten van de commando-lijn (3) Aanroep java CopyFile mijn-file mijn-file.copy

100 Inleiding Informatica Prof. Dr. O. De Troyer 100 Twee dimensionale array’s Array waarbij de elementen van het type Array zijn –Vb: new int [5] [6]

101 Inleiding Informatica Prof. Dr. O. De Troyer 101 Twee dimensionale array’s (2) Ook voor te stellen als een matrix Vb: new int [5] [6] ste dim 2de dim

102 Inleiding Informatica Prof. Dr. O. De Troyer 102 Patroon for (alle element i in 1ste dim) for (alle elementen j in 2de dim) { x = element[i] [j]; verwerk x ; } Patroon for (alle element i in 1ste dim) for (alle elementen j in 2de dim) { x = element[i] [j]; verwerk x ; } Twee dimensionale array’s (3) –Alle elementen doorlopen for ( int i = 0 ; i < a.length; i ++ ) for (int j = 0 ; j < a[i].length; j ++ ) { x = a[i] [j]; verwerk x ; }

103 Inleiding Informatica Prof. Dr. O. De Troyer 103 Twee dimensionale array’s (3) Ook andere structuren mogelijk Vb: final grootte = 5 ; int [ ] [ ] driehoek = new int [grootte] [ ] ; for (int i = 0 ; i < grootte ; i ++ ) { driehoek[i] = new int [ i + 1] ; }

104 Inleiding Informatica Prof. Dr. O. De Troyer 104 Meer dimensionale array’s Vb: new int [5] [6] [2] ste dim 2de dim 3de dim

105 Inleiding Informatica Prof. Dr. O. De Troyer 105 Array’s - voorbeeld Game of life ? Regel: een cel bevat leven in de volgende generatie als 2 of 3 van zijn buren leven bevatten in de huidige generatie

106 Inleiding Informatica Prof. Dr. O. De Troyer 106 Array’s - Game of Life (2) Regel: een cel bevat leven in de volgende generatie als 2 of 3 van zijn buren leven bevatten in de huidige generatie

107 Inleiding Informatica Prof. Dr. O. De Troyer 107 Intermezzo: Een programma ontwerpen Methode 1. Beschrijf het probleem 2. Geef een mogelijk scenario 3. Zoek de belangrijkste objecten –Vaak aangegeven door naamwoorden 4. Bouw de klassen voor de diverse objecten 4.1. Bepaal het gewenste gedrag 4.2. Bepaal de interface van de methoden 4.3. Schrijf een voorbeeld programma die de klasse gebruikt 4.4. Maak het skelet van de klasse 4.5. Schrijf de code voor de methoden

108 Inleiding Informatica Prof. Dr. O. De Troyer 108 Array’s - Game of Life (3) Scenario –Speel de Game of Life –Toon iedere generatie op een eenvoudige manier op het scherm –De begin generatie wordt random gekozen Elke cel heeft een zekere kans te leven –Neem een 15 X 15 grid kans op leven in een cel als 10%

109 Inleiding Informatica Prof. Dr. O. De Troyer 109 Array’s - Game of Life (4) Belangrijkste objecten/klassen –GameOfLife Klasse GameOfLife –Interface Constructor GameOfLife –Parameters: »grootte grid »kans op leven (getal tussen 0 en 1) Methode doGeneraties –Geen parameters

110 Inleiding Informatica Prof. Dr. O. De Troyer 110 Array’s - Game of Life (5) Skelet class GameOfLife { public GameOfLife ( int grootte, double kansLeven) ) { statements } public void doGeneraties ( ) { statements } instantie variabelen indien nodig }

111 Inleiding Informatica Prof. Dr. O. De Troyer 111 Array’s - Game of Life (6) Instantie variabelen –Het grid 2 dim array van boolean –True: bevat leven –False: bevat geen leven private boolean [ ] [] grid ; –De regels static final int minBuren = 2, maxBuren = 3; –Object voor het afdrukken van de wereld private WereldDisplay wereldDisplay

112 Inleiding Informatica Prof. Dr. O. De Troyer 112 Array’s - Game of Life (7) De klasse WereldDisplay –constructor public WereldDisplay () ; - methode voor het afdrukken public void toonWereld( boolean [ ] [ ] grid);

113 Inleiding Informatica Prof. Dr. O. De Troyer 113 Array’s - Game of Life (8) Implementatie –Leven geven aan een cel Via de random methode uit de klasse Math –Cel bevat enkel leven als Math.random < kansLeven grid [i][j] = Math.random() < kansLeven ;

114 Inleiding Informatica Prof. Dr. O. De Troyer 114 Array’s - Game of Life (11) Implementatie public GameOfLife ( int grootte, double kansLeven) ) { // object om wereld af te drukken aanmaken wereldDisplay = new WereldDisplay() ; // lege grid/wereld aanmaken grid = new boolean [grootte] [grootte] ; //wereld initialiseren for (int i = 0; i < grid.length; i++) for (int j = 0 ; j

115 Inleiding Informatica Prof. Dr. O. De Troyer 115 Array’s - Game of Life (12) Implementatie doGeneraties public void doGeneraties () throws IOException { // eerste keer wereld afdrukken wereldDisplay.toonWereld(grid) ; // Zolang er leven is gaan we door while nogLeven() { volgendeGeneratie (); wereldDisplay.toonWereld(grid) ; } } twee lokale methoden nodig: –nogLeven() –volgendeGeneratie ();

116 Inleiding Informatica Prof. Dr. O. De Troyer 116 Array’s - Game of Life (13) Implementatie - nogLeven private boolean nogLeven () { // geeft true zodra één levende cel gevonden for (int i = 0; i < grid.length; i++) for (int j = 0 ; j

117 Inleiding Informatica Prof. Dr. O. De Troyer 117 Array’s - Game of Life (14) Implementatie - volgendeGeneratie –extra grid nodig! boolean [ ] [ ] nieuweGrid = new boolean [grootte] [grootte] ; –Implementatie van de regel: if (levendeBuren( i, j ) >= minBuren && (levendeBuren( i, j ) <= maxBuren nieuweGrid [i] [j] = true ; else nieuweGrid [i] [j] = false ; Of nog nieuweGrid [i] [j] = levendeBuren( i, j ) >= minBuren && levendeBuren( i, j ) <= maxBuren –Methode levendeBuren nodig

118 Inleiding Informatica Prof. Dr. O. De Troyer 118 Array’s - Game of Life (15) Implementatie - volgendeGeneratie (2) private void volgendeGeneratie () { //nieuwe lege grid maken boolean [ ] [ ] nieuweGrid = new boolean [grootte] [grootte] ; //nieuwe grid berekenen for (int i = 0; i < grid.length; i++) for (int j = 0 ; j = minBuren && levendeBuren( i, j ) <= maxBuren ; //oude grid vervangen door de nieuwe grid = nieuweGrid ; }

119 Inleiding Informatica Prof. Dr. O. De Troyer 119 Array’s - Game of Life (16) Implementatie - levendeBuren –Telt het aantal levende buren i,j i-1,j-1i-1,ji-1,j+1 i+1,j-1 i+1,ji+1,j+1 i,j-1i,j+1

120 Inleiding Informatica Prof. Dr. O. De Troyer 120 Array’s - Game of Life (17) Implementatie - levendeBuren (2) private int levendeBuren (int i, int j) { // resultaat om aantal levende buren bij te houden, 0 om te beginnen int resultaat = 0 ; //elke buur bekijken if leeft(i-1, j-1) resultaat ++ ; if leeft(i-1, j) resultaat ++ ; if leeft(i-1, j+1) resultaat ++ ; if leeft(i, j-1) resultaat ++ ; if leeft(i, j+1) resultaat ++ ; if leeft(i+1, j-1) resultaat ++ ; if leeft(i+1, j) resultaat ++ ; if leeft(i+1, j+1) resultaat ++ ; return resultaat ; }

121 Inleiding Informatica Prof. Dr. O. De Troyer 121 Array’s - Game of Life (18) Implementatie - leeft private boolean leeft (int i, int j) { // positie i, j kan buiten de grid liggen, geef dan false terug if (i >= 0) && (i < grid.length) && (j >= 0) && (j < grid[i].length ) return grid(i, j) ; else return false; }

122 Inleiding Informatica Prof. Dr. O. De Troyer 122 Array’s - Game of Life (19) Implementatie - klasse WereldDisplay class WereldDisplay { Private BufferedReader keybd ; public WereldDisplay () { keybd = new BufferedReader (new InputStreamReader (System.in) ) ; } public void toonWereld( boolean [ ] [ ] grid) throws IOException { System.out.print(“Druk return om verder te gaan …”) ; System.out.flush() ; keybd.readLine() ; tekenLijn(grid.length + 2); for (int i = 0 ; i < grid.length, i++) { System.out.print(“ |”) ; for (int j = 0 ; j < grid[i].length, j++) tekenCel(grid[ i ][ j ]); System.out.print(“ |”) ; } tekenLijn(grid.length + 2); }

123 Inleiding Informatica Prof. Dr. O. De Troyer 123 Array’s - Game of Life (20) Implementatie - klasse WereldDisplay (2) private void tekenLijn( int n) throws IOException { // druk lijn van n streepjes - for (int i = 0 ; i < n, i++) { System.out.print(“ -”) ; System.out.println() ; } } private void tekenCel( boolean b) throws IOException { // voor levende cel druk *, voor dode cel druk spatie if (b ) System.out.print(“ *”) ; else System.out.print(“ “) ; }

124 Inleiding Informatica Prof. Dr. O. De Troyer 124 String - herziening Strings zijn te vergelijken met array’s –Ze bestaan uit karakters –Eerste karakter bevindt zich op positie 0 –Methode charAt(positie) geeft het karakter op de gegeven positie “abcdefg”.charAt(3) –char is het primitieve data type voor karakters

125 Inleiding Informatica Prof. Dr. O. De Troyer 125 String - karakters manipuleren Voorbeeld Test of String s1 een substring is van String s2 Hoe? Vergelijk beide strings karakter per karakter tot een verschillend karakter of einde van een van beide strings bereikt is Begin bij 0

126 Inleiding Informatica Prof. Dr. O. De Troyer 126 String - karakters manipuleren (2) Vergelijk beide strings karakter per karakter (begin bij 0) tot een verschillend karakter of einde van een van beide strings bereikt is abcde abcdefgh int k = 0 ; while ( (k < s1.length()) && (k < s2.length()) && (s1.charAt(k) == s2.charAt(k)) ) k++ ; boolean isSubstring = ( k == s1.length () ); abcde abudefgh abcde ab


Download ppt "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 6: Controle structuren."

Verwante presentaties


Ads door Google