HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE

79
1 HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1. INTRODUCTIE Vervolg discussie omtrent gestructureerd programmeren Introductie van de overblijvende controlestructuren

description

HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE. Vervolg discussie omtrent gestructureerd programmeren Introductie van de overblijvende controlestructuren. 5.2.     ESSENTIE VAN DE HERHALING GECONTROLEERD DOOR EEN TELLER. Voor een herhaling met een teller zijn nodig: - PowerPoint PPT Presentation

Transcript of HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE

Page 1: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

1

HOOFDSTUK 5

CONTROLESTRUCTUREN (DEEL 2)

5.1.     INTRODUCTIE

Vervolg discussie omtrent gestructureerd programmeren

Introductie van de overblijvende controlestructuren

Page 2: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

2

5.2.     ESSENTIE VAN DE HERHALING

GECONTROLEERD DOOR EEN TELLER

Voor een herhaling met een teller zijn nodig:

• naam van een controlevariabele (de teller)

• initiële waarde van de controlevariabele

• increment/decrement van de controlevariabele elke keer de lus doorlopen wordt

• conditie, die test op de eindwaarde van de controlevariabele

Page 3: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

3

WhileCounter.java

• is een programma (applet), dat een waaier van 10 lijnen gaat tekenen

• gebruikt een while- herhalingsstructuur

• gebruikt een teller om de herhaling bij te houden

VOORBEELD

Page 4: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

4

1 // Fig. 5.1: WhileCounter.java2 // Herhaling gecontroleerd door een teller3 4 // Java core packages5 import java.awt.Graphics;6 7 // Java extension packages8 import javax.swing.JApplet;9 10 public class WhileCounter extends JApplet11 {12 // trek lijnen op de achtergrond van de applet lines on applet13 public void paint( Graphics g ) 14 {15 // roep de overgeërfde versie van de methode paint op16 super.paint( g );17 18 int counter = 1; // initialisatie 19 20 while ( counter <= 10 ) // conditie van de herhaling21 { 22 g.drawLine( 10, 10, 250, counter * 10 ); 23 ++counter; // increment24 } // einde while structuur25 26 } // einde methode paint27 28 } // einde klasse WhileCounter

Page 5: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

5

18 int counter = 1; // initialisatie 19 20 while ( counter <= 10 ) // conditie van de herhaling21 { 22 g.drawLine( 10, 10, 250, counter * 10 ); 23 ++counter; // increment24 } // einde while structuur

Lijn 18• Naam van de controlevariabele is counter.• Initiële waarde van de controlevariabele is 1.

Lijn 20• Conditionele test op de eindwaarde van counter.

Lijn 23• Increment van de controlevariabele counter.

Page 6: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

6

5.3.     DE “FOR” HERHALINGSSTRUCTUUR

for ( expressie1; expressie2; expressie3 ) statement

• hanteert alle details van de herhalingsstructuur met teller

Page 7: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

7

ForCounter.java

• is een programma (applet), dat een waaier van 10 lijnen gaat tekenen.

• gebruikt een for-herhalingsstructuur.

VOORBEELD

Page 8: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

8

1 // Fig. 5.2: ForCounter.java2 // Herhaling gecontroleerd door een teller via een for-structuur 3 4 // Java core packages5 import java.awt.Graphics;6 7 // Java extension packages8 import javax.swing.JApplet;9 10 public class ForCounter extends JApplet11 { 12 // teken lijnen op de achtergrond van de applet13 public void paint( Graphics g )14 {15 // roep de overgeërfde versie van de methode paint op16 super.paint( g );17 18 // Initialisatie, herhalingsconditie and incrementeren19 // zijn allemaal inbegrepen in de hoofding van de for structuur. 20 for ( int counter = 1; counter <= 10; counter++ ) 21 g.drawLine( 10, 10, 250, counter * 10 );22 23 } // einde methode paint24 25 } // einde klasse ForCounter

Page 9: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

9

18 // Initialisatie, herhalingsconditie and incrementeren19 // zijn allemaal inbegrepen in de hoofding van de for structuur. 20 for ( int counter = 1; counter <= 10; counter++ ) 21 g.drawLine( 10, 10, 250, counter * 10 );

Lijn 20

int counter = 1• Naam van de controlevariabele is counter.• Initiële waarde van de controlevariabele is 1.

counter <= 10• Conditionele test op de eindwaarde van counter.

counter++• Increment van de controlevariabele counter.

Page 10: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

10

REGEL 20 UIT FORCOUNTER.JAVA

for ( int counter = 1; counter <= 10; counter++ )

Beginwaarde van de controlevariabele

Increment van de controlevariabele

Naam van de controlevariabele

Eindwaarde van de controlevariabele

for sleutelwoord

Conditie voor vervolg van de lus

Fig. 5.3 Componenten van een typische hoofding van een “for” structuur.

Page 11: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

11

5.3.     DE “FOR” HERHALINGSSTRUCTUUR (VERVOLG)

for ( expressie1; expressie2; expressie3 ) statement

kan herschreven worden als:

{ expressie1; while ( expressie2 )

{ statement expressie3; }

}

Page 12: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

12

FLOWCHART VAN EEN TYPISCHE

“FOR” HERHALINGSSTRUCTUUR

Fig. 5.4 Flowchart van een typische “for” herhalingsstructuur.

counter <= 10

g.drawLine(

10, 10, 250,

counter * 10

);

true

false

Stel de

beginwaarde

van de controle-

Bepaal of

de eindwaarde

van de controle-

variabele bereikt is.“body” van de lus

(dit kunnen meerdere

Statements zijn)

Incrementeer

de controle-

variabele.

counter <- 1

counter<- counter + 1

variabele vast

Page 13: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

13

5.4.     VOORBEELDEN DIE GEBRUIK MAKEN

VAN DE “FOR” HERHALINGSSTRUCTUUR

Variërende controlevariabele in de for structuur

• De controlevariabele varieert van 1 tot 100, toenemend in stappen van 1for ( int i = 1; i <= 100; i++ )

• De controlevariabele varieert van 100 tot 1,afnemend in stappen van –1for ( int i = 100; i >= 1; i-- )

• De controlevariabele varieert van 7 tot 77 in stappen van 7

for ( int i = 7; i <= 77; i += 7 )

Page 14: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

14

Sum.java

• de som van de even gehele getallen van 2 t.e.m. 100 wordt weergegeven op het scherm.

• gebruikt een for-herhalingsstructuur in stappen van 2.

VOORBEELD 1

Page 15: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

15

1 // Fig. 5.5: Sum.java2 // Herhaling gecontroleerd door een teller met de “for” structuur3 4 // Java extension packages5 import javax.swing.JOptionPane;6 7 public class Sum8 {9 // de uitvoering van de Java applicatie begint bij de main method10 public static void main( String args[] )11 {12 int total = 0;13 14 // sommeer de even gehele getallen van 2 tot en met 10015 for ( int number = 2; number <= 100; number += 2 )16 total += number;17 18 // toon het resultaat19 JOptionPane.showMessageDialog( null, "The sum is " + total,20 "Sum Even Integers from 2 to 100",21 JOptionPane.INFORMATION_MESSAGE );22 23 System.exit( 0 ); // beëindig de applicatie 24 25 } // einde methode main26 27 } // einde klasse Sum

Page 16: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

16

12 int total = 0;13 14 // sommeer de even gehele getallen van 2 tot en met 10015 for ( int number = 2; number <= 100; number += 2 )16 total += number;17 18 // toon het resultaat19 JOptionPane.showMessageDialog( null, "The sum is " + total,20 "Sum Even Integers from 2 to 100",21 JOptionPane.INFORMATION_MESSAGE );

Lijn 15

number += 2

• incrementeer number met 2 bij elke iteratie

Page 17: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

17

Interest.java

• is een programma dat de samengestelde intrest berekent

a = p(1 + r)n

p = kapitaal (in ons vb. $1000)r = jaarlijkse intrest (in ons vb. 5%)n = aantal jarena = kapitaal na n jaar

• Het kapitaal MET de samengestelde intrest wordt voor de eerste 10 jaar weergegeven.• gebruikt een for-herhalingsstructuur.

VOORBEELD 2

Page 18: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

18

1 // Fig. 5.6: Interest.java2 // Berekening van samengestelde interest3 4 // Java core packages5 import java.text.NumberFormat ;6 import java.util.Locale;7 8 // Java extension packages9 import javax .swing.JOptionPane ;10 import javax .swing.JTextArea ;11 12 public class Interest

13 { 14 // de uitvoering van de Java applicatie begint bij de main methode15 public static void main( String args [] )16 {17 double amount, principal = 1000.0, rate = 0.05 ;18 19 // creëer NumberFormat om floating point getallen20 // met twee cijfers rechts van de decimale punt te formatteren21 NumberFormat moneyFormat = 22 NumberFormat .getCurrencyInstance ( Locale.US );23 24 // creëer JtextArea om de uitvoer te laten zien25 JTextArea outputTextArea = new JTextArea ();26 27 // plaats de eerste lijn tekst in outputTextArea28 outputTextArea .setText ( "Year\tAmount on deposit\n" );29 30 // bereken het bedrag in deposito voor elk van de tien jaren31 for ( int year = 1; year <= 10; year++ )

32 { 33 // bereken nieuw bedrag voor een specifiek jaar34 amount = principal * Math. pow ( 1.0 + rate, year );35

Interest.java

Page 19: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

19

Interest.java

vervolg code + uitvoer

36 // voeg één lijn tekst toe aan outputTextArea37 outputTextArea.append( year + " \t" +38 moneyFormat.format( amount ) + " \n" );39 40 } // einde for structuur41 42 // toon het resultaat43 JOptionPane .showMessageDialog ( null , outputTextArea ,44 "Compound Interest" , JOptionPane .INFORMATION_MESSAGE );45 46 System.exit( 0 ); // beëindig de applicatie47 48 } // einde methode main49 50 } // einde klasse Interest

Page 20: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

20

12 public class Interest 13 {14 // de uitvoering van de Java applicatie begint bij de main methode15 public static void main( String args[] )16 {17 double amount, principal = 1000.0, rate = 0.05;18

Lijn 17

• Java stockeert floating-point getallen in variabelen van het type double (of float)

Page 21: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

21

19 // creëer NumberFormat om floating point getallen20 // met twee cijfers rechts van de decimale punt te formatteren21 NumberFormat moneyFormat = 22 NumberFormat.getCurrencyInstance( Locale.US );23 24 // creëer JtextArea om de uitvoer te laten zien25 JTextArea outputTextArea = new JTextArea();26 27 // plaats de eerste lijn tekst in outputTextArea28 outputTextArea.setText( "Year\tAmount on deposit\n" );29

Lijn 21

• NumberFormat kan numerieke waarden als een valuta formatteren

Lijn 22: Locale.US

• Toont geldbedragen met een dollarteken ($)

Page 22: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

22

30 // bereken het bedrag in deposito voor elk van de tien jaren31 for ( int year = 1; year <= 10; year++ )32 {33 // bereken nieuw bedrag voor een specifiek jaar34 amount = principal * Math.pow( 1.0 + rate, year );35 36 // voeg één lijn tekst toe aan outputTextArea37 outputTextArea.append( year + "\t" +38 moneyFormat.format( amount ) + "\n" );39 40 } // einde for structuur

Lijn 31-40

• Bereken amount (kapitaal) met een for structuur amount = a = p(1 + r)n

Lijn 34

• Math.pow(1.0 + rate, year) (1.0 + rate)year

Page 23: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

23

41 42 // toon het resultaat43 JOptionPane.showMessageDialog( null, outputTextArea,44 "Compound Interest", JOptionPane.INFORMATION_MESSAGE );45 46 System.exit( 0 ); // beëindig de applicatie47 48 } // einde methode main49 50 } // einde klasse Interest

Page 24: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

24

5.5.     DE “DO/WHILE” HERHALINGSSTRUCTUUR

do statement while (voorwaarde);lijkt op de while structuur, MAAR test of de lus verder doorlopen moet worden

NADAT de body van de loop uitgevoerd is dit betekent dat de lus altijd

MINSTENS EENMAAL doorlopen wordt

Het statement wordt herhaald zolang de voorwaarde WAAR blijft!

Zorg ervoor dat de voorwaarde beïnvloed wordt in het statement, anders oneindige lus!

Page 25: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

25

DoWhileControle.java

• Er wordt gevraagd om een positief geheel getal, verschillend van nul in te voeren; de invoer wordt vervolgens gecontroleerd; indien deze niet voldoet, wordt een nieuwe waarde aan de gebruiker gevraagd.Is de invoer in orde, dan wordt dit getal in een dialoogvenster getoond.

VOORBEELD

Page 26: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

26

1 // Dit voorbeeld staat niet in het boek!!!2 // Using the do/while repetition structure.3 4 // Java core packages5 import java.awt.Graphics;6 7 // Java extension packages8 import javax.swing.*;9 10 public class DoWhileControle11 { 12 public static void main( String[] args )13 {14 int getal;15 String input;16 17 do18 {19 input = JOptionPane.showInputDialog(“Geef een positief 20 geheel getal,verschillend van nul in : “);21 getal = Integer.parseInt(input);22 } 23 while ( getal <= 0 ); // einde do/while structuur24 JOptionPane.showMessageDialog(null,”Het ingevoerde getal = “ +

getal);25 System.exit(0);26 } // einde methode main27 } // einde klasse DoWhileControle

Page 27: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

27

do18 {19 input = JOptionPane.showInputDialog(“Geef een positief20 geheel getal,verschillend van nul in : “);21 getal = Integer.parseInt(input);22 } 23 while ( getal <= 0 ); // einde do/while structuur

Lijn 19-23• Een getal wordt ingevoerd en vervolgens wordt er getest op de waarde van getal.• Voldoet de waarde van getal niet, dan krijgt de gebruiker een tweede kans om een getal in te voeren.• Enz..., tot het ingevoerde getal voldoet aan de gestelde vraag.

Merk op: de lus wordt niet verlaten, zolang het ingevoerde getal niet voldoet!

Page 28: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

28

FLOWCHART VAN DE “DO/WHILE”

HERHALINGSSTRUCTUUR

actie(s)

conditietrue

false

Fig. 5.10 Flowchart van de do/while herhalingsstructuur.

Page 29: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

29

5.6.     DE “SWITCH”

MEERVOUDIGE SELECTIESTRUCTUUR

switch structuur

wordt gebruikt voor meervoudige selecties:switch (var) {

case label1: statement1

break;

case label2: statement2

break;

default: statement3

[ break;]

}

Page 30: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

30

SwitchTest.java (= applet)

• de gebruiker geeft een getal in

1 = een waaier van 10 lijnen tekenen

2 = 10 vierkanten tekenen

3 = 10 cirkels tekenen

1, 2 en 3 = de tekst "Invalid value entered“ wordt weergegeven.

VOORBEELD

Page 31: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

31

1 // Fig. 5.7: SwitchTest.java2 // Lijnen, rechthoeken of ovalen tekenen op basis van de input van de gebruiker. 3 4 // Java core packages5 import java.awt.Graphics;6 7 // Java extension packages8 import javax.swing.*;9 10 public class SwitchTest extends JApplet11 { private int choice; // keuze van de gebruiker welke vorm getekend moet worden12 13 // initialiseeer de applet door de keuze van de gebruiker te verkrijgen14 public void init()15 {16 String input; // input van de gebruiker17 18 // verkrijg de keuze van de gebruiker19 input = JOptionPane.showInputDialog( 20 "Enter 1 to draw lines\n" +21 "Enter 2 to draw rectangles\n" +22 "Enter 3 to draw ovals\n");23 24 // converteer de input van de gebruiker naar een int25 choice = Integer.parseInt( input );26 }

Verkrijg input van de gebruiker

Page 32: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

32

28 // teken vormen op de achtergrond van de applet29 public void paint( Graphics g )30 {31 // roep de overgeërfde versie van de methode paint op32 super.paint( g );33 34 // bepaal de te tekenen vorm op basis van de keuze van de gebruiker35 36 switch ( choice )37 {38 case 1:39 for ( int i = 0; i < 10; i++ ) g.drawLine( 10, 10, 250, 10 + i * 10 );40 break; // gedaan met dit geval te verwerken41 42 case 2:43 for ( int i = 0; i < 10; i++ ) 44 g.drawRect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 );45 break; // gedaan met dit geval te verwerken46 47 case 3:48 for ( int i = 0; i < 10; i++ ) 49 g.drawOval( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 );50 break; // gedaan met dit geval te verwerken51 52 default:53 g.drawString( "Invalid value entered",54 10, 20 + i * 15 );55 56 } // einde switch structuur57 58 } // einde for structuur59 60 } // einde paint methode61 62 } // einde klasse SwitchTest

Page 33: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

33

SWITCHTEST.JAVA: OUTPUT

Page 34: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

34

36 switch ( choice )37 {38 case 1:39 for ( int i = 0; i < 10; i++ ) g.drawLine( 10, 10, 250, 10 + i * 10 );40 break; 41 42 case 2:43 for ( int i = 0; i < 10; i++ ) 44 g.drawRect( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 );45 break; // gedaan met dit geval te verwerken46 47 case 3:48 for ( int i = 0; i < 10; i++ ) 49 g.drawOval( 10 + i * 10, 10 + i * 10,50 + i * 10, 50 + i * 10 );50 break; // gedaan met dit geval te verwerken51 52 default:53 g.drawString( "Invalid value entered",54 10, 20 + i * 15 );55 56 } // einde switch structuur

input van de gebruiker (choice) is de controlerende expressie

Lijn 36• de switch structuur bepaalt welk case label uitgevoerd moet worden, wat afhangt van de controlerende expressie.

default case voor ongeldige

ingaven

Page 35: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

35

FLOWCHART VAN DE “SWITCH”

MEERVOUDIGE SELECTIESTRUCTUUR

break

break

break

case a actie(s)

case b actie(s)

case z actie(s)

default actie(s)

case a

case b

case z

true

true

true

false

false

false

Fig. 5.8 De switch meervoudige selectiestructuur.

Page 36: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

36

Zet de volgende geneste if-structuren om in een switch – case-structuur

1. int i, k;// invoer van een waarde voor iif (i == 1) k = 3; else if (i == 2) k = 6; else if ( i == 3 || i == 4) k = 10;

else k = 20;}

2. int x, y = 0;// invoer van een waarde voor xif (x == 100 || x == 150 || x == 170 || x == 199) y++;

Page 37: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

37

OPLOSSINGEN

1. int i, k;// invoer van een waarde voor iswitch (i){ case 1 : k = 3; break; case 2 : k = 6; break; case 3 : case 4 : k = 10; break; default : k = 20;}

Page 38: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

38

OPLOSSINGEN

2. int x, y = 0;// invoer van een waarde voor xswitch (x){

case 100 : case 150 : case 170 :case 199 : y++;

}

Page 39: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

39

5.7.     STATEMENTS “BREAK” EN “CONTINUE”

break/continue• veranderen de stroom van de controle

break statement • veroorzaakt een onmiddellijke exit uit de controlestructuur• wordt gebruikt in while, for, do/while en switch statements

continue statement • slaat de resterende statements in de body van de lus over• gaat verder naar de volgende iteratie• wordt gebruikt in while, for en do/while statements

Page 40: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

40

1 // Fig. 5.11: BreakTest.java2 // Gebruik van het break statement in een for structuur3 4 // Java extension packages5 import javax.swing.JOptionPane;6 7 public class BreakTest8 { 9 // de uitvoering van de Java applicatie begint bij de main methode10 public static void main( String args[] )11 {12 String output = "";13 int count;14 15 // herhaal 10 keer16 for ( count = 1; count <= 10; count++ )

17 { 18 // als count gelijk is aan 5, beëindig dan de lus19 if ( count == 5 )20 break; // onderbreek de lus enkel als count == 521 22 output += count + " ";23 24 } // einde for structuur25 26 output += "\nBroke out of loop at count = " + count;27 JOptionPane.showMessageDialog( null, output );28 29 System.exit( 0 ); // beëindig de applicatie30 31 } // einde methode main32 33 } // einde klasse BreakTest

BreakTest.java

Voorbeeld met break statement

Page 41: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

41

16 for ( count = 1; count <= 10; count++ )17 {18 // als count gelijk is aan 5, beëindig dan de lus19 if ( count == 5 )20 break; // onderbreek de lus enkel als count == 5 21 22 output += count + " ";23 24 } // einde for structuur

Lijn 16• Herhaal 10 keer

Lijn 20• ga uit de for structuur (break) wanneer count gelijk is aan 5

Page 42: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

42

1 // Fig. 5.12: ContinueTest .java2 // Gebruik van het continue statement in een for structuur3 4 // Java extension packages5 import javax.swing. JOptionPane ;6 7 public class ContinueTest8 {9 // de uitvoering van de Java applicatie begint bij de main methode10 public static void main( String args[] )11 {12 String output = "";13 14 // herhaal 10 keer15 for ( int count = 1; count <= 10; count++ )

16 { 17 // als count 5 is, ga verder met de volgende iteratie van de lus18 if ( count == 5 )19 continue ; // sla de overblijvende code in de lus over20 // enkel als count == 521 22 output += count + " ";23 24 } // einde for structuur25 26 output += "\nUsed continue to skip printing 5" ;27 JOptionPane .showMessageDialog ( null, output );28 29 System.exit( 0 ); // beëindig de applicatie30 31 } // einde methode main32 33 } // einde klasse ContinueTest

ContinueTest.java

Voorbeeld met continue statement

Page 43: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

43

15 for ( int count = 1; count <= 10; count++ )16 {17 // als count 5 is, ga verder met de volgende iteratie van de lus

18 if ( count == 5 )19 continue; // sla de overblijvende code20 // in de lus over enkel als count == 521 22 output += count + " ";23 24 } // einde for structuur Lijn 15

• Herhaal 10 keer

Lijn 19• Sla lijn 22 over en ga verder naar lijn 15 als count 5 is

Page 44: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

44

5.8.     LOGISCHE OPERATOREN

Logische operatoren• zorgen ervoor dat complexere condities gevormd kunnen worden• combineren eenvoudige condities

Logische operatoren in Java• && (conditionele EN)• & (logische EN)• || (conditionele OF)• | (logische inclusieve OF)• ^ (logische exclusieve OF)• ! (logische NIET)

Page 45: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

45

WAARHEIDSTABEL CONDITIONELE EN (&&)

expressie1 expressie2 expressie1 && expressie2

false false false

false true false

true false false

true true true

Fig. 5.15 Waarheidstabel voor de && operator.

Page 46: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

46

WAARHEIDSTABEL CONDITIONELE OF (||)

expressie1 expressie2 expressie1 || expressie2

false false false

false true true

true false true

true true true

Fig. 5.15 Waarheidstabel voor || operator.

Page 47: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

47

WAARHEIDSTABEL LOGISCHE EXCLUSIEVE OF (^)

expressie1 expressie2 expressie1 ̂ expressie2

false false false

false true true

true false true

true true false

Fig. 5.15 Waarheidstabel voor de logische exclusieve OF (̂ ) operator.

Page 48: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

48

WAARHEIDSTABEL LOGISCHE EXCLUSIEVE OF (^)

Deze operator heeft geen short-circuit evaluatie!Beide operands worden steeds geëvalueerd!

Voorbeeld:Als x negatief is moet y positief zijn of omgekeerd, als y negatief is moet x positief zijn.

if (x < 0 ^ y < 0) // (x < 0 en y >= 0) of // (y < 0 en x >= 0)

Page 49: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

49

WAARHEIDSTABEL LOGISCHE NIET (!)

expressie !expressie

false true

true false

Fig. 5.18 Waarheidstabel voor de operator ! (logische negatie, of logische NIET).

Page 50: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

50

Short-circuit-operatoren

• De logische AND (&) en de logische inclusieve OR (|) werken op dezelfde manier als de conditionele AND (&&) en de conditionele OF (||), mits één uitzondering: het zijn GEEN short-circuit-operatoren

• de logische operatoren & en | evalueren steeds de beide operands

Voorbeelden:

geslacht == 1 & leeftijd >= 65

verjaardag == true | ++ leeftijd >= 65

Page 51: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

51

Short-circuit-operatoren (vervolg)

• een expressie met een conditionele AND (&&) of een conditionele OF (||) wordt geëvalueerd totdat geweten is of de volledige expressie true of false oplevert

Gevolgen:

1. Zet bij de operator && de conditie die meest kans heeft om vals te zijn links van de operator, bij de operator || de conditie die meest kans heeft om waar te zijn.

2. Zet de conditie die eventueel niet mag geëvalueerd worden rechts!

Page 52: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

52

Short-circuit-operatoren (vervolg)

Voorbeelden:

n != 0 && q < 1.0 / n

Als n = 0 dan is n != 0 vals -> volledig vals en GEEN deling door nul!

n == 0 || q > 1.0 / n

Als n = 0 dan is n == 0 true -> volledig true en GEEN deling door nul!

verjaardag == true || ++ leeftijd >= 65

Als verjaardag = true dan is conditie1 true -> volledig true, MAAR geen aanpassing van de leeftijd!!!

Page 53: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

53

1 // Fig. 5.19: LogicalOperators .java2 // Demonstratie van de logische operatoren3 4 // Java extension packages5 import javax .swing.*;6 7 public class LogicalOperators

8 { 9 // de uitvoering van de Java applicatie begint bij de main methode10 public static void main( String args [] )11 {12 // creëer een JTextArea om de resultaten te laten zien13 JTextArea outputArea = new JTextArea ( 17, 20 );14 15 // hang de JTextArea aan een JScrollPane, zodat de gebruiker kan16 // scrollen door de resultaten17 JScrollPane scroller = new JScrollPane ( outputArea );18 19 String output;20 21 // creëer de waarheidstabel voor de && operator22 output = "Logical AND (&&)" +23 "\nfalse && false: " + ( false && false ) +24 "\nfalse && true: " + ( false && true ) +25 "\ntrue && false: " + ( true && false ) +26 "\ntrue && true: " + ( true && true );27 28 // creëer de waarheidstabel voor de || operator29 output += "\n\nLogical OR (||)" +30 "\nfalse || false: " + ( false || false ) +31 "\nfalse || true: " + ( false || true ) +32 "\ntrue || false: " + ( true || false ) +33 "\ntrue || true: " + ( true || true );34

waarheidstabel logische EN

waarheidstabel logische OF

Logical Operators.java

Page 54: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

54

Logical Operators.java

vervolg

"Truth Tables"

35 // creëer de waarheidstabel voor de & operator36 output += "\n\nBoolean logical AND (&)" +37 "\nfalse & false: " + ( false & false ) +38 "\nfalse & true: " + ( false & true ) +39 "\ntrue & false: " + ( true & false ) +40 "\ntrue & true: " + ( true & true );41 42 // creëer de waarheidstabel voor de | operator43 output += "\n\nBoolean logical inclusive OR (|)" +44 "\nfalse | false: " + ( false | false ) +45 "\nfalse | true: " + ( false | true ) +46 "\ntrue | false: " + ( true | false ) +47 "\ntrue | true: " + ( true | true );48 49 // creëer de waarheidstabel voor de ^ operator50 output += "\n\nBoolean logical exclusive OR (^)" +51 "\nfalse ^ false: " + ( false ^ false ) +52 "\nfalse ^ true: " + ( false ^ true ) +53 "\ntrue ^ false: " + ( true ^ false ) +54 "\ntrue ^ true: " + ( true ^ true );55 56 // creëer de waarheidstabel voor de ! operator57 output += "\n\nLogical NOT (!)" +58 "\n!false: " + ( ! false ) + 59 "\n!true: " + ( ! true );60 61 outputArea .setText ( output ); // plaats resultaten in JOptionPane62 63 JOptionPane .showMessageDialog ( null , scroller ,64 , JOptionPane . INFORMATION_MESSAGE );65 66 System.exit( 0 );

Waarheidstabel voor de logische NIET

// beëindig de applicatie

Waarheidstabel voor de booleaanse logische

exclusieve OF

waarheidstabel voor de booleaanse logische EN

waarheidstabel voor de booleaanse logische OF

Page 55: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

55

67 68 } // einde methode main69 70 } // einde klasse LogicalOperators

LogicalOperators.java

vervolg

Page 56: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

56

21 // creëer de waarheidstabel voor de && operator22 output = "Logical AND (&&)" +23 "\nfalse && false: " + ( false && false ) +24 "\nfalse && true: " + ( false && true ) +25 "\ntrue && false: " + ( true && false ) +26 "\ntrue && true: " + ( true && true );27

Lijn 22-26• waarheidstabel logische EN

Page 57: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

57

28 // creëer de waarheidstabel voor de || operator29 output += "\n\nLogical OR (||)" +30 "\nfalse || false: " + ( false || false ) +31 "\nfalse || true: " + ( false || true ) +32 "\ntrue || false: " + ( true || false ) +33 "\ntrue || true: " + ( true || true );34

Lijn 29-33• waarheidstabel logische OF

Page 58: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

58

35 // creëer de waarheidstabel voor de & operator36 output += "\n\nBoolean logical AND (&)" +37 "\nfalse & false: " + ( false & false ) +38 "\nfalse & true: " + ( false & true ) +39 "\ntrue & false: " + ( true & false ) +40 "\ntrue & true: " + ( true & true );41

Lijn 36-40• waarheidstabel voor de booleaanse logische EN

Page 59: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

59

42 // creëer de waarheidstabel voor de | operator43 output += "\n\nBoolean logical inclusive OR (|)" +44 "\nfalse | false: " + ( false | false ) +45 "\nfalse | true: " + ( false | true ) +46 "\ntrue | false: " + ( true | false ) +47 "\ntrue | true: " + ( true | true );48

Lijn 43-47• waarheidstabel voor de booleaanse logische OF

Page 60: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

60

49 // creëer de waarheidstabel voor de ^ operator50 output += "\n\nBoolean logical exclusive OR (^)" +51 "\nfalse ^ false: " + ( false ^ false ) +52 "\nfalse ^ true: " + ( false ^ true ) +53 "\ntrue ^ false: " + ( true ^ false ) +54 "\ntrue ^ true: " + ( true ^ true );55

Lijn 50-54• Waarheidstabel voor de booleaanse logische exclusieve OF

Page 61: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

61

56 // creëer de waarheidstabel voor de ! operator57 output += "\n\nLogical NOT (!)" +58 "\n!false: " + ( !false ) + 59 "\n!true: " + ( !true );60

Lijn 57-59• Waarheidstabel voor de logische NIET

Page 62: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

62

PRECEDENTIE EN ASSOCIATIVITEIT

VAN DE OPERATOREN

Operators Associativity Type

() van links naar rechts haakjes

++ -- van rechts naar links unair postfix ++ -- + - ! (type) van rechts naar links unair * / % van links naar rechts multiplicerend + - van links naar rechts toevoegend < <= > >= van links naar rechts relationeel == != van links naar rechts gelijkheid & van links naar rechts booleaanse logische EN ^ van links naar rechts booleaanse logische

exclusieve OF | van links naar rechts booleaanse logische

inclusieve OF && van links naar rechts logische EN || van links naar rechts logische OF ?: van rechts naar links conditioneel = += -= *= /= %= van rechts naar links toekenning

Fig. 5.20 Precedentie en associativiteit van operatoren.

Page 63: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

63

5.9.     SAMENVATTING

GESTRUCTUREERD PROGRAMMEREN

Sequentiestructuur• “ingebouwd” in Java

Selectiestructuren• if, if/else en switch

Herhalingsstructuren• while, do/while en for

Page 64: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

64

     SAMENVATTING HERHALINGSSTRUCTUREN Je gebruikt een ‘for’ of een ‘while’ indien je van

tevoren weet om hoeveel herhalingen het gaat.

Weet je niet van tevoren om hoeveel herhalingen het gaat, dan dien je een ‘while’ of een ‘do-while’ te gebruiken.

• Je kiest voor een ‘while’ indien de body van de while misschien nooit mag worden uitgevoerd. De ‘voorwaarde’ wordt eerst getest. De body van de while wordt uitgevoerd zolang de ‘voorwaarde’ waar is.

• Je kiest voor een ‘do-while’ indien de body van de ‘do-while’ tenminste één keer moet worden uitgevoerd. Eerst wordt de body van de ‘do-while uitgevoerd, vervolgens wordt de voorwaarde gecontroleerd. Zolang de expressie waar is, wordt de body van de ‘do-while’ uitgevoerd.

Page 65: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

65

de body van de while wordt 0, 1 of meerdere keren uitgevoerd.

de body van de do-while wordt minstens 1 keer uitgevoerd.

     SAMENVATTING HERHALINGSSTRUCTUREN

Page 66: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

66

    

OEFENINGEN

Hoofdstuk 5

Page 67: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

67

    

1. Deze code zou moeten printen of een geheel getal value, even of oneven is

switch ( value % 2 )

{

case 0:

System.out.println( “Even getal” );

case 1:

System.out.println( “Oneven getal” );

}

Vind de fout(en) in volgende stukjes code:

Page 68: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

68

    

2. Deze code zou moeten de oneven gehele getallen van 19 tot en met 1 printen

for ( x = 19; x >= 1; x += 2 )

System.out.println( x );

Vind de fout(en) in volgende stukjes code:

Page 69: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

69

    

Stel: i = 1, j = 2, k = 3 en m = 2

a) System.out.println( i == 1 );

b) System.out.println( j == 3 );

c) System.out.println( i >= 1 && j < 4 );

d) System.out.println( m <= 99 & k < m );

e) System.out.println( j >= i || k == m );

f) System.out.println( k + m < j | 3 – j >= k );

g) System.out.println( !( k > m ) );

Welke output geven volgende statements?

Page 70: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

70

    

volgende patronen print, enkel gebruik makend van:System.out.print(‘*’), System.out.println() en voor (c) en (d) ook nog System.out.print(‘ ’)

(a) (b) (c) (d)

* ********** ********** *

** ********* ********* **

*** ******** ******** ***

**** ******* ******* ****

***** ****** ****** *****

****** ***** ***** ******

******* **** **** *******

******** *** *** ********

********* ** ** *********

*********** * * **********

Schrijf een applicatie die…

Page 71: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

71

    

OPLOSSINGEN

Hoofdstuk 5

Page 72: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

72

    

1. Deze code zal printen of een geheel getal value, even of oneven is

switch ( value % 2 )

{

case 0:

System.out.println( “Even getal” );

break;

case 1:

System.out.println( “Oneven getal” );

break;

}

Verbeterde code:

Page 73: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

73

    

2. Deze code zal de oneven gehele getallen van 19 tot en met 1 printen

int x;for ( x = 19; x >= 1; x -= 2 )

System.out.println( x );

Verbeterde code:

Page 74: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

74

    

Stel: i = 1, j = 2, k = 3 en m = 2

a) System.out.println( i == 1 ); true

b) System.out.println( j == 3 ); false

c) System.out.println( i >= 1 && j < 4 ); true

d) System.out.println( m <= 99 & k < m ); false

e) System.out.println( j >= i || k == m ); true

f) System.out.println( k + m < j | 3 – j >= k ); false

g) System.out.println( !( k > m ) ); false

Welke output geven volgende statements?

Page 75: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

75

    

volgende patronen print, enkel gebruik makend van:System.out.print(‘*’), System.out.println() en voor (c) en (d) ook nog System.out.print(‘ ’)

(a) (b) (c) (d)

* ********** ********** *

** ********* ********* **

*** ******** ******** ***

**** ******* ******* ****

***** ****** ****** *****

****** ***** ***** ******

******* **** **** *******

******** *** *** ********

********* ** ** *********

*********** * * **********

Schrijf een applicatie die…

Page 76: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

76

    

public class PatroonA

{

public static void main (String args[])

{

for (int i=1; i<=10; i++) // 10 rijen

{

for (int j=1; j<=i; j++) // #kol = rij-index

System.out.print (‘*’);

System.out.println();

}

}

}

Patroon a

Page 77: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

77

    

public class PatroonB

{

public static void main (String args[])

{

for (int i=1; i<=10; i++) // 10 rijen

{

for (int j1=1; j1<=i-1; j1++)// 0,1,..,9 sp

System.out.print (‘ ’);

for (int j2=11-i; j2>=1; j2--)//10,9,..,1 *

System.out.print (‘*’);

System.out.println();

}

}

}

Patroon b

Page 78: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

78

    

public class PatroonC

{

public static void main (String args[])

{

for (int i=1; i<=10; i++) // 10 rijen

{

for (int j=11-i; j>=1; j--) // 10,9,8,..,1 kol

System.out.print (‘*’);

System.out.println();

}

}

}

Patroon c

Page 79: HOOFDSTUK 5  CONTROLESTRUCTUREN (DEEL 2) 5.1.      INTRODUCTIE

79

    

public class PatroonD

{

public static void main (String args[])

{

for (int i=1; i<=10; i++)// 10 rijen

{

for (int j1=10-i; j1>=1; j1--)// 9,8,..,0 sp

System.out.print (‘ ’);

for (int j2=1; j2<=i; j2++)//1,2,3,..,10 *

System.out.print (‘*’);

System.out.println();

}

}

}

Patroon d