slide1
Download
Skip this Video
Download Presentation
HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE

Loading in 2 Seconds...

play fullscreen
1 / 79

HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE - PowerPoint PPT Presentation


  • 117 Views
  • Uploaded on

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:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1.     INTRODUCTIE' - plato-slater


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

HOOFDSTUK 5

CONTROLESTRUCTUREN (DEEL 2)

5.1.     INTRODUCTIE

  • Vervolg discussie omtrent gestructureerd programmeren
  • Introductie van de overblijvende controlestructuren
slide2

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
slide3

VOORBEELD

  • 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
slide4

1 // Fig. 5.1: WhileCounter.java

2 // Herhaling gecontroleerd door een teller

3

4 // Java core packages

5 import java.awt.Graphics;

6

7 // Java extension packages

8 import javax.swing.JApplet;

9

10 public class WhileCounter extends JApplet

11 {

12 // trek lijnen op de achtergrond van de applet lines on applet

13 public void paint( Graphics g )

14 {

15 // roep de overgeërfde versie van de methode paint op

16 super.paint( g );

17

18 int counter = 1;// initialisatie

19

20 while ( counter <= 10 )// conditie van de herhaling

21 {

22 g.drawLine( 10, 10, 250, counter * 10 );

23 ++counter; // increment

24 }// einde while structuur

25

26 } // einde methode paint

27

28 } // einde klasse WhileCounter

slide5

18 int counter = 1;// initialisatie

19

20 while ( counter <= 10 )// conditie van de herhaling

21 {

22 g.drawLine( 10, 10, 250, counter * 10 );

23 ++counter;// increment

24 }// 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.
slide6

5.3.     DE “FOR” HERHALINGSSTRUCTUUR

  • for (expressie1;expressie2;expressie3 )statement
  • hanteert alle details van de herhalingsstructuur met teller
slide7

VOORBEELD

  • ForCounter.java
    • is een programma (applet), dat een waaier van 10 lijnen gaat tekenen.
    • gebruikt een for-herhalingsstructuur.
slide8

1 // Fig. 5.2: ForCounter.java

2 // Herhaling gecontroleerd door een teller via een for-structuur

3

4 // Java core packages

5 import java.awt.Graphics;

6

7 // Java extension packages

8 import javax.swing.JApplet;

9

10 public class ForCounter extends JApplet

11 {

12 // teken lijnen op de achtergrond van de applet

13 public void paint( Graphics g )

14 {

15 // roep de overgeërfde versie van de methode paint op

16 super.paint( g );

17

18 // Initialisatie, herhalingsconditie and incrementeren

19 // 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 paint

24

25 } // einde klasse ForCounter

slide9

18 // Initialisatie, herhalingsconditie and incrementeren

19 // 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.
slide10

REGEL 20 UIT FORCOUNTER.JAVA

Naam van de

Eindwaarde van de

for

controlevariabele

controlevariabele

sleutelwoord

for (

int

counter =

1

; counter <=

10

; counter++ )

Beginwaarde

Increment

van de controlevariabele

van de controlevariabele

Conditie voor vervolg van de lus

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

slide11

5.3.     DE “FOR” HERHALINGSSTRUCTUUR (VERVOLG)

for (expressie1;expressie2;expressie3 )statement

kan herschreven worden als:

{ expressie1; while (expressie2 )

{statementexpressie3; }

}

slide12

FLOWCHART VAN EEN TYPISCHE

“FOR” HERHALINGSSTRUCTUUR

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

Stel de

counter <- 1

beginwaarde

van de controle-

variabele vast

true

g.drawLine(

counter<- counter + 1

Bepaal of

counter <= 10

10, 10, 250,

de eindwaarde

counter * 10

Incrementeer

van de controle-

);

de controle-

variabele bereikt is.

false

“body” van de lus

variabele.

(dit kunnen meerdere

Statements zijn)

slide13

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 1
      • for ( int i = 1; i <= 100; i++ )
    • De controlevariabele varieert van 100 tot 1,
      • afnemend in stappen van –1
      • for ( 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 )
slide14

VOORBEELD 1

  • 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.
slide15

1 // Fig. 5.5: Sum.java

2 // Herhaling gecontroleerd door een teller met de “for” structuur

3

4 // Java extension packages

5 import javax.swing.JOptionPane;

6

7 public class Sum

8 {

9 // de uitvoering van de Java applicatie begint bij de main method

10 public static void main( String args[] )

11 {

12 int total = 0;

13

14 // sommeer de even gehele getallen van 2 tot en met 100

15 for ( int number = 2; number <= 100; number += 2 )

16 total += number;

17

18 // toon het resultaat

19 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 main

26

27 } // einde klasse Sum

slide16

12 int total = 0;

13

14 // sommeer de even gehele getallen van 2 tot en met 100

15 for ( int number = 2; number <= 100; number += 2 )

16 total += number;

17

18 // toon het resultaat

19 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
slide17

VOORBEELD 2

  • 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 jaren
    • a = kapitaalna n jaar
    • Het kapitaal MET de samengestelde intrest wordt voor de eerste 10 jaar weergegeven.
    • gebruikt een for-herhalingsstructuur.
slide18

1

// Fig. 5.6: Interest.java

2

// Berekening van samengestelde interest

3

4

// Java core packages

5

import

java.text.

NumberFormat

;

6

import

java.util.Locale;

7

8

// Java extension packages

9

import

javax

.swing.

JOptionPane

;

Interest.java

10

import

javax

.swing.

JTextArea

;

11

12

public class

Interest

13 {

14

// de uitvoering van de Java applicatie begint bij de main methode

15

public static void

main( String

args

[] )

16

{

17

double

amount, principal =

1000.0

, rate =

0.05

;

18

19

// creëer NumberFormat om floating point getallen

20

// met twee cijfers rechts van de decimale punt te formatteren

21

NumberFormat moneyFormat

=

22

NumberFormat

.

getCurrencyInstance

( Locale.

US

);

23

24

// creëer JtextArea om de uitvoer te laten zien

25

JTextArea outputTextArea

=

new

JTextArea

();

26

27

// plaats de eerste lijn tekst in outputTextArea

28

outputTextArea

.

setText

(

"Year

\

tAmount

on deposit

\

n"

);

29

30

// bereken het bedrag in deposito voor elk van de tien jaren

31

for

(

int

year =

1

; year <=

10

; year++ )

32{

33

// bereken nieuw bedrag voor een specifiek jaar

34

amount = principal * Math.

pow

(

1.0

+ rate, year );

35

slide19

36

// voeg één lijn tekst toe aan outputTextArea

37

outputTextArea

.append( year + "

\

t" +

38

moneyFormat

.format( amount ) + "

\

n" );

39

40

}

// einde for structuur

41

42

// toon het resultaat

43

JOptionPane

.

showMessageDialog

(

null

,

outputTextArea

,

44

"Compound Interest"

,

JOptionPane

.

INFORMATION_MESSAGE

);

45

46

System.exit(

0

);

// beëindig de applicatie

47

48

}

// einde methode main

49

50

}

// einde klasse Interest

Interest.java

vervolg code + uitvoer

slide20

12 public class Interest

13 {

14 // de uitvoering van de Java applicatie begint bij de main methode

15 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)
slide21

19 // creëer NumberFormat om floating point getallen

20 // met twee cijfers rechts van de decimale punt te formatteren

21 NumberFormat moneyFormat =

22 NumberFormat.getCurrencyInstance( Locale.US );

23

24 // creëer JtextArea om de uitvoer te laten zien

25 JTextArea outputTextArea = new JTextArea();

26

27 // plaats de eerste lijn tekst in outputTextArea

28 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 ($)
slide22

30 // bereken het bedrag in deposito voor elk van de tien jaren

31 for ( int year = 1; year <= 10; year++ )

32 {

33 // bereken nieuw bedrag voor een specifiek jaar

34 amount = principal * Math.pow( 1.0 + rate, year );

35

36 // voeg één lijn tekst toe aan outputTextArea

37 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
slide23

41

42 // toon het resultaat

43 JOptionPane.showMessageDialog( null, outputTextArea,

44 "Compound Interest", JOptionPane.INFORMATION_MESSAGE );

45

46 System.exit( 0 ); // beëindig de applicatie

47

48 } // einde methode main

49

50 } // einde klasse Interest

slide24

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 WAARblijft!
  • Zorg ervoor dat de voorwaarde beïnvloed wordt in het statement, anders oneindige lus!
slide25

VOORBEELD

  • 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.
slide26

// Dit voorbeeld staat niet in het boek!!!

  • 2 // Using the do/while repetition structure.
  • 3
  • 4 // Java core packages
  • 5 import java.awt.Graphics;
  • 6
  • 7 // Java extension packages
  • 8 import javax.swing.*;
  • 9
  • 10 public class DoWhileControle
  • 11 {
  • 12 public static void main( String[] args )
  • 13 {
  • 14 int getal;
  • 15 String input;
  • 16
  • 17 do
  • 18 {
  • 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 structuur
  • 24 JOptionPane.showMessageDialog(null,”Het ingevoerde getal = “ + getal);
  • System.exit(0);
  • } // einde methode main
  • } // einde klasse DoWhileControle
slide27

do

18 {

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 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!
slide28

FLOWCHART VAN DE “DO/WHILE”

HERHALINGSSTRUCTUUR

actie(s)

true

conditie

false

Fig. 5.10 Flowchart van de do/while herhalingsstructuur.

slide29

5.6.     DE “SWITCH”

MEERVOUDIGE SELECTIESTRUCTUUR

  • switchstructuur
    • wordt gebruikt voor meervoudige selecties:
  • switch (var)
  • {
      • case label1: statement1
      • break;
      • case label2: statement2
      • break;
      • default: statement3
      • [ break;]
      • }
slide30

VOORBEELD

  • 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.
slide31

1 // Fig. 5.7: SwitchTest.java

2 // Lijnen, rechthoeken of ovalen tekenen op basis van de input van de gebruiker.

3

4 // Java core packages

5 import java.awt.Graphics;

6

7 // Java extension packages

8 import javax.swing.*;

9

10 public class SwitchTest extends JApplet

11 { private int choice;// keuze van de gebruiker welke vorm getekend moet worden

12

13 // initialiseeer de applet door de keuze van de gebruiker te verkrijgen

14 public void init()

15 {

16 String input; // input van de gebruiker

17

18 // verkrijg de keuze van de gebruiker

19 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 int

25 choice = Integer.parseInt( input );

26 }

Verkrijg input van de gebruiker

slide32

28 // teken vormen op de achtergrond van de applet

29 public void paint( Graphics g )

30 {

31 // roep de overgeërfde versie van de methode paint op

32 super.paint( g );

33

34 //bepaal de te tekenen vorm op basis van de keuze van de gebruiker

35

36 switch ( choice )

37 {

38 case1:

39 for ( int i = 0; i < 10; i++ )g.drawLine( 10, 10, 250, 10 + i * 10 );

40 break; // gedaan met dit geval te verwerken

41

42 case2:

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 verwerken

46

47 case3:

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 verwerken

51

52 default:

53 g.drawString( "Invalid value entered",

54 10, 20 + i * 15 );

55

56 }// einde switch structuur

57

58 }// einde for structuur

59

60 }// einde paint methode

61

62 }// einde klasse SwitchTest

slide34

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 verwerken

46

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 verwerken

51

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

defaultcase voor ongeldige ingaven

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

FLOWCHART VAN DE “SWITCH”

MEERVOUDIGE SELECTIESTRUCTUUR

true

case a actie(s)

case a

break

false

true

break

case b

case b actie(s)

false

true

case z actie(s)

case z

break

false

default actie(s)

Fig. 5.8 De switch meervoudige selectiestructuur.

slide36

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

  • int i, k;
  • // invoer van een waarde voor i
  • if (i == 1) k = 3;
  • else if (i == 2) k = 6;
  • else if ( i == 3 || i == 4) k = 10;
  • else k = 20;
  • }
  • int x, y = 0;
  • // invoer van een waarde voor x
  • if (x == 100 || x == 150 || x == 170 || x == 199) y++;
slide37

OPLOSSINGEN

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

OPLOSSINGEN

  • int x, y = 0;
  • // invoer van een waarde voor x
  • switch (x)
  • {
  • case 100 : case 150 : case 170 :
  • case 199 : y++;
  • }
slide39

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
slide40

Voorbeeld met break statement

1

// Fig. 5.11:

BreakTest

.java

2

// Gebruik van het break statement in een for structuur

3

4

// Java extension packages

5

import

javax

.swing.

JOptionPane

;

6

BreakTest.java

7

public class

BreakTest

8 {

9

// de uitvoering van de Java applicatie begint bij de main methode

10

public static void

main( String

args

[] )

11

{

12

String output =

""

;

13

int

count;

14

15

// herhaal 10 keer

16

for

( count =

1

; count <=

10

; count++ )

17{

18

// als count gelijk is aan 5, beëindig dan de lus

19

if

( count ==

5

)

20

break

;

// onderbreek de lus enkel als count == 5

21

22

output += count +

" "

;

23

24

}

// einde for structuur

25

26

output +=

"

\

nBroke

out of loop at count = "

+ count;

27

JOptionPane

.

showMessageDialog

(

null

, output );

28

29

System.exit(

0

);

// beëindig de applicatie

30

31

}

// einde methode main

32

33

}

// einde klasse BreakTest

slide41

16 for ( count = 1; count <= 10; count++ )

17 {

18 // als count gelijk is aan 5, beëindig dan de lus

19 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
slide42

Voorbeeld met continue statement

1

// Fig. 5.12:

ContinueTest

.java

2

// Gebruik van het continue statement in een for structuur

3

4

// Java extension packages

5

import

javax

.swing.

JOptionPane

;

6

7

public class

ContinueTest

ContinueTest.java

8{

9

// de uitvoering van de Java applicatie begint bij de main methode

10

public static void

main( String

args

[] )

11

{

12

String output =

""

;

13

14

// herhaal 10 keer

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 code in de lus over

20

// enkel als count == 5

21

22

output += count +

" "

;

23

24

}

// einde for structuur

25

26

output +=

"

\

nUsed

continue to skip printing 5"

;

27

JOptionPane

.

showMessageDialog

(

null

, output );

28

29

System.exit(

0

);

// beëindig de applicatie

30

31

}

// einde methode main

32

33

}

// einde klasse ContinueTest

slide43

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 code

20 // in de lus over enkel als count == 5

21

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 count5 is
slide44

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

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)

slide50

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
slide51

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:
  • 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.
  • Zet de conditie die eventueel niet mag geëvalueerd worden rechts!
slide52

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!!!

slide53

1

// Fig. 5.19:

LogicalOperators

.java

2

// Demonstratie van de logische operatoren

3

4

// Java extension packages

5

import

javax

.swing.*;

6

7

public class

LogicalOperators

8{

Logical Operators.java

9

// de uitvoering van de Java applicatie begint bij de main methode

10

public static void

main( String

args

[] )

11

{

12

// creëer een JTextArea om de resultaten te laten zien

13

JTextArea outputArea

=

new

JTextArea

(

17

,

20

);

14

15

// hang de JTextArea aan een JScrollPane, zodat de gebruiker kan

16

// scrollen door de resultaten

17

JScrollPane scroller

=

new

JScrollPane

(

outputArea

);

18

19

String output;

waarheidstabel logische EN

20

21

// creëer de waarheidstabel voor de && operator

22

output =

"Logical AND (&&)"

+

23

"

\

nfalse

&& false: "

+ (

false

&&

false

) +

24

"

\

nfalse

&& true: "

+ (

false

&&

true

) +

25

"

\

ntrue

&& false: "

+ (

true

&&

false

) +

26

"

\

ntrue

&& true: "

+ (

true

&&

true

);

waarheidstabel logische OF

27

28

// creëer de waarheidstabel voor de || operator

29

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

slide54

35

// creëer de waarheidstabel voor de & operator

36

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 | operator

43

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 ^ operator

50

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 ! operator

57

output +=

"

\

n

\

nLogical

NOT (!)"

+

58

"

\

n!false: "

+ ( !

false

) +

59

"

\

n!true: "

+ ( !

true

);

60

61

outputArea

.

setText

( output );

// plaats resultaten in JOptionPane

62

63

JOptionPane

.

showMessageDialog

(

null

,

scroller

,

64

waarheidstabel voor de booleaanse logische EN

Logical Operators.java

vervolg

waarheidstabel voor de booleaanse logische OF

Waarheidstabel voor de booleaanse logische exclusieve OF

Waarheidstabel voor de logische NIET

"Truth Tables"

,

JOptionPane

.

INFORMATION_MESSAGE

);

65

66

System.exit(

0

);

// beëindig de applicatie

slide55

67

68

}

// einde methode main

69

70

}

// einde klasse LogicalOperators

LogicalOperators.java

vervolg

slide56

21 // creëer de waarheidstabel voor de && operator

22 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
slide57

28 // creëer de waarheidstabel voor de || operator

29 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
slide58

35 // creëer de waarheidstabel voor de & operator

36 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
slide59

42 // creëer de waarheidstabel voor de | operator

43 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
slide60

49 // creëer de waarheidstabel voor de ^ operator

50 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
slide61

56 // creëer de waarheidstabel voor de ! operator

57 output += "\n\nLogical NOT (!)" +

58 "\n!false: " + ( !false ) +

59 "\n!true: " + ( !true );

60

  • Lijn 57-59
    • Waarheidstabel voor de logische NIET
slide63

5.9.     SAMENVATTING

GESTRUCTUREERD PROGRAMMEREN

  • Sequentiestructuur
    • “ingebouwd” in Java
  • Selectiestructuren
    • if, if/else en switch
  • Herhalingsstructuren
    • while, do/while en for
slide64

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.
slide65

SAMENVATTING HERHALINGSSTRUCTUREN

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

de body van de do-while wordt minstens1 keer uitgevoerd.

slide66

OEFENINGEN

Hoofdstuk 5

vind de fout en in volgende stukjes code
Vind de fout(en) in volgende stukjes code:
  • 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 code1
Vind de fout(en) in volgende stukjes code:
  • 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 );
welke output geven volgende statements
Welke output geven volgende statements?
  • Stel: i = 1, j = 2, k = 3 en m = 2
  • System.out.println( i == 1 );
  • System.out.println( j == 3 );
  • System.out.println( i >= 1 && j < 4 );
  • System.out.println( m <= 99 & k < m );
  • System.out.println( j >= i || k == m );
  • System.out.println( k + m < j | 3 – j >= k );
  • System.out.println( !( k > m ) );
schrijf een applicatie die
Schrijf een applicatie die…

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)

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

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

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

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

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

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

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

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

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

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

slide71

OPLOSSINGEN

Hoofdstuk 5

verbeterde code
Verbeterde code:
  • 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 code1
Verbeterde code:
  • 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 );
welke output geven volgende statements1
Welke output geven volgende statements?
  • Stel: i = 1, j = 2, k = 3 en m = 2
  • System.out.println( i == 1 ); true
  • System.out.println( j == 3 ); false
  • System.out.println( i >= 1 && j < 4 ); true
  • System.out.println( m <= 99 & k < m ); false
  • System.out.println( j >= i || k == m ); true
  • System.out.println( k + m < j | 3 – j >= k ); false
  • System.out.println( !( k > m ) ); false
schrijf een applicatie die1
Schrijf een applicatie die…

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)

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

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

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

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

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

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

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

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

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

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

patroon a
Patroon a

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 b
Patroon b

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 c
Patroon c

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 d
Patroon d

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

}

}

}

ad