Hoofdstuk 6: Controle structuren

Slides:



Advertisements
Verwante presentaties

Advertisements


‘SMS’ Studeren met Succes deel 1
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.

NEDERLANDS WOORD BEELD IN & IN Klik met de muis
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
Programmeren met Alice
Hoofdstuk 8: Recursie.
Arduino project.
Practica Computerlinguistiek Tekst en uitleg:
Van domeinklasse tot implementatie
Het ontwerpen van een klasse
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Het type int Tekenen met Java operatoren
VBA en VBS Een introductie.
Nooit meer onnodig groen? Luuk Misdom, IT&T
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Computervaardigheden Hoofdstuk 4 — Scripting (Let op: dit is enkel voor studenten Biologie.)
Hoofdstuk 5: Bestanden.
Hoofdstuk 4: Klassen definiëren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 1 Kwaliteit en Patiëntveiligheid in de Belgische ziekenhuizen anno 2008 Rapportage over.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Hoofdstuk 2 Hallo, C# !.
Oefeningen F-toetsen ANOVA.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
Frank Stalpers en Ad Baars
Inleidend probleem Data structuur (hiërarchie van classes)
Numerieke Natuurkunde
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
1 WIJZIGINGEN UNIEK VERSLAG. 2 Agenda Verbeteringen Veranderingen formulieren Praktische herinneringen Nieuwe formulieren Sociale en culturele participatie.
SWI cursus: ‘Inleiding programmeren in Java’
Optuigen van datastructuren
CONTROLESTRUCTUREN (DEEL 1)
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Algoritmiek Object-georiënteerd Programmeren
6.1 Inleiding HOOFDSTUK 6 METHODEN
Hoofdstuk 3: Inleiding tot Java Applets
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
Inleiding tot programmeren
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Les 3 Basisbouwstenen (deel 2) Programmeren met Visual Basic Karl Moens.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
CONTROLESTRUCTUREN (DEEL 1)
Hoofdstuk 3 - Conditionele logica
tircms02-p les 1 Operating Systems practicum
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Loops en errors Array's Random try catch for loop while loop do while loop.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Informatie beoordelen If else Switch En Wiskunde.
Gameprogrammeren: Keuzeopdrachten
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
SQL Les February 2019.
Python – For loop + strings
Transcript van de presentatie:

Hoofdstuk 6: Controle structuren

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 variabelen Actie indien conditie voldaan Actie indien Conditie niet voldaan

if statement Java if (assen == 2) tol = 100 ; else tol = 200 ; conditie Sleutelwoorden Actie wordt enkel uit-gevoerd indien conditie waar is Actie wordt enkel uit- gevoerd indien conditie niet waar is

conditie Statements uit te voeren als conditie true is Statements uit te voeren als conditie false is false true

… 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) ;

if statement (2) Twee alternatieven: if (conditie) statement1 else statement2 Geen actie als conditie niet voldaan: if (conditie) statement

If - eenvoudig voorbeeld uur = uur + 1; if (uur == 24) uur = 0 ; }

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

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 ;

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 == gelijk vb: 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

boolean type Primitief data type boolean Twee waarde: true en false Te gebruiken zoals andere typen Meer later

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

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);

Genestelde if statements if (uren <= 60) if (hours > 40) System.out.print(“ Overuren“); else System.out.print(“Geen overuren); System.out.print(“Dubbele overuren); Genestelde if/else

Genestelde if statements (2) Opgelet if (uren <= 60) { if (hours > 40) System.out.print(“ Overuren“); } else System.out.print(“Dubbele overuren);

Meer over het boolean type Boolean variabelen boolean isKoud ; if (temp < 5) isKoud = true ; else isKoud = false; if (isKoud) System.out.println(“Brrrrrr!”) ;

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”);

Meer over het boolean type (3) Boolean expressies Waarde is een boolean Vb: temp < 5 public boolean Koud (Int temp ) { return (temp < 5) ; }

Logische operatoren expressie && expressie logische “and” True als beide expressies true zijn Vb: (uur == 12) && (min == 10)

Logische operatoren (2) expressie || expressie logische “or” True als één van beide expressies true is Vb: (uur == 12 ) || (uur == 10)

Logische operatoren (3) ! expressie logische “not” True als de expressie false is Vb: ! (uur == 12)

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)

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

Logische operatoren en if-statements Zijn equivalent if (conditie1 && conditie2) statement if (conditie1) if (conditie2) statement if (conditie1) statement else if (conditie2) if (conditie1 || conditie2) statement

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

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

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)

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)

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) ;

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() ;

Time vb - Klasse skelet class Time { public Time( int hours, int minutes, String amOrPm) { statements } // is eerder public boolean isBefore(Time t) { // is later public boolean isAfter(Time t) { // schrijf naar een PrintStream; public void print(PrintStream ps) {

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) { instantie variabelen indien nodig

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 ; ... }

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

Time vb - Implementatie (2) De constructor Time Uren te vermeerderen met 12 Uren sinds middernacht is 0 12 am 1 am 12 pm 1 pm Uren wijzigen niet 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 ;

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

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”);

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) ;

Herhalingen

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

conditie true Statements uit te voeren als conditie true is false

while statement Java while (conditie) body Uitvoering 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.

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 Test of er een werknemer is Lees de gegevens van de volgende werknemer

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(); w heeft geen waarde de eerste keer! Stop nooit indien eerste w niet null !

while statement - Lees/verwerk patroon lees eerste item while (een geldig item is gelezen) { verwerk het item lees het volgende item }

Voorbeeld Bereken xY xY = 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

Voorbeeld (2) Zet de beginwaarde voor de conditie Geeft beginwaarde aan variabele gebruikt in de loop 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 uiteindelijk voor het resultaat Zorgt er voor dat de conditie uiteindelijk false zal worden

while statement - Algemeen patroon Geef begin waarde aan de conditie while (conditie) { statements wijzig de conditie (zodat conditie uiteindelijk false wordt) }

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

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

Andere herhalingspatronen De “accumulator” patroon “Het meest extreem object” patroon “De meest extreme waarde” patroon Zie later

for statement Is equivalent met Alternatief voor de while-statement voor een “tel-lus” for ( initialisatie toekenningen; conditie ; increment) body Is equivalent met initialisatie toekenningen; while (conditie) { increment; }

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 ++; }

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; }

do statement do { body} while conditie; 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

do statement - voorbeeld 1 Voorbeeld : som van 0 tot 100 i = 0; som = 0; do { som += i ; i ++; } while (i <100 );

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 <j ){ som += i ; i ++; } Niet altijd equivalent! - Wanneer niet?

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 case waarde3 : statement3 default: statement4 }

Switch statement (2) switch (x) { case waarde1 : statement1 break; case waarde2 : statement2 case waarde3 : statement3 default: statement4 } 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.

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

Hoofdstuk 7: Objecten organiseren

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

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

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

De klasse CijferLijst Gedrag Instantie variabelen 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

CijferLijst vb - Klasse skelet class CijferLijst{ // instantie variabele private Vector students; private int klasGemiddelde ; public CijferLijst( String bestandsNaam ) { statements } public void Evaluate() {

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

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 ;

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 Voorbeeld Vector v = new Vector () ; int i = 0; while (i < 3) { v.addElement(new Integer(i)) ; i++ ; } Integer-waarde eerst omzetten naar Integer-object

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)

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) ; Algemeen object Conversie

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

k duidt het volgende af te drukken element aan int k = 0 ; while (k < v.size() ) { System.out.println (v.elementAt (k) ) ; k++ ; } k duidt het volgende af te drukken element aan v.size() - 1 v.size() -2 v 1 k Nog af te drukken v.size() - 1 v.size() -2 v 1 8 k Reeds afgedrukt Nog af te drukken v.size() - 1 v.size() -2 v 1 v.size() k Reeds afgedrukt

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++ ; }

CijferLijst vb - voorbeeld programma class TryCijferLijst { public static void main (String[ ] args) throws IOException { CijferLijst lijst = new CijferLijst(“test”); lijst.evaluate () ; }

Voorbeeld - werken met posities Druk de elementen van een vector af in omgekeerde volgorde int k ; // volgend af te drukken element k = v.size() -1 ; // achteraan beginnen while (k != -1) { System.out.println(v.elementAt(k)) ; k--; } v.size() - 1 v.size() -2 v 1 8 k Nog af te drukken Reeds afgedrukt

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 i A voor B C Z Na v.insertElementAt(o,i) i v 1 A B C Z o

De klasse Vector - posities (3) Methode removeElementAt( int i) verwijdert het element op positie i Alle elementen vanaf positie worden 1 positie terug geschoven i 9 v 1 voor o A B C Z v 1 i A Na v.removeElementAt(i) B C Z

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

Voorbeeld - zoeken (2) s te zoeken string (parameter) k is de positie van het volgende te checken elementen 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 v.size() - 1 v.size() -2 v 1 8 k Reeds gecheckt Nog te checken

Voorbeeld - zoeken (3) 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 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 ;

voorbeeld - “Het meest extreem object” patroon Het “extreem” object vinden in een groep van objecten. Vb: student met hoogste cijfer Student besteStudent = null; // variabele om het meest extreme object bij te // houden dat tot zover gevonden werd besteStudent = 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 }

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 }

Array Lijkt op een vector Maar: 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

Array’s declareren type [ ] naam 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 !

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 2 3 4 5 1

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

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 nummers[2] = nummers[1] * 2 ;

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.

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 ++ ; }

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 -- ; }

Voorbeeld - “De meest extreme waarde” patroon De meest “extreme” waarde vinden in een groep van primitieve waarden. Vb: kleinste getal uit een array 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 ++ ; }

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 }

Voorbeeld - “Accumulator” patroon 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 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 }

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 }

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

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

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

De argumenten van de commando-lijn (3) Aanroep java CopyFile mijn-file mijn-file.copy

Twee dimensionale array’s Array waarbij de elementen van het type Array zijn Vb: new int [5] [6] 2 3 4 5 1 2 3 4 1

Twee dimensionale array’s (2) Ook voor te stellen als een matrix Vb: new int [5] [6] 2de dim 1 2 3 4 5 1ste dim 1 2 3 4

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

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] ; } 2 3 4 1

Meer dimensionale array’s Vb: new int [5] [6] [2] 3de dim 2de dim 1 2 3 4 5 1 1ste dim 2 3 4

? 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

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

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

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%

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

Array’s - Game of Life (5) Skelet class GameOfLife { public GameOfLife ( int grootte, double kansLeven) ) { statements } public void doGeneraties ( ) { instantie variabelen indien nodig

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

Array’s - Game of Life (7) De klasse WereldDisplay constructor public WereldDisplay () ; - methode voor het afdrukken public void toonWereld( boolean [ ] [ ] grid);

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 ;

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 <grid[i].length; j++ ) grid [i][j] = Math.random() < kansLeven ; }

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 (); } twee lokale methoden nodig: nogLeven()

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 <grid[i].length; j++ ) if grid [i][j] return true ; return false; }

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

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 <grid[i].length; j++ ) nieuweGrid [i] [j] = levendeBuren( i , j ) >= minBuren && levendeBuren( i , j ) <= maxBuren ; //oude grid vervangen door de nieuwe grid = nieuweGrid ; }

Array’s - Game of Life (16) Implementatie - levendeBuren Telt het aantal levende buren i-1,j-1 i-1,j i-1,j+1 i,j i,j-1 i,j+1 i+1,j-1 i+1,j i+1,j+1

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 ; }

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; }

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 ]);

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(“ “) ;

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

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

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 abudefgh int k = 0 ; while ( (k < s1.length()) && (k < s2.length()) && (s1.charAt(k) == s2.charAt(k)) ) k++ ; boolean isSubstring = ( k == s1.length () ); abcde abcdefgh abcde ab