1 HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1. INTRODUCTIE Vervolg discussie omtrent gestructureerd programmeren Introductie van de overblijvende controlestructuren
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
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
4 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 ); int counter = 1; // initialisatie while ( counter <= 10 ) // conditie van de herhaling 21 { 22 g.drawLine( 10, 10, 250, counter * 10 ); 23 ++counter; // increment 24 } // einde while structuur } // einde methode paint } // einde klasse WhileCounter
5 18 int counter = 1; // initialisatie 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.
DE “FOR” HERHALINGSSTRUCTUUR for ( expressie1; expressie2; expressie3 ) statement hanteert alle details van de herhalingsstructuur met teller
7 ForCounter.java is een programma (applet), dat een waaier van 10 lijnen gaat tekenen. gebruikt een for-herhalingsstructuur. VOORBEELD
8 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 ); // 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 ); } // einde methode paint } // einde klasse ForCounter
9 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.
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.3Componenten van een typische hoofding van een “for” structuur.
DE “FOR” HERHALINGSSTRUCTUUR (VERVOLG) for ( expressie1; expressie2; expressie3 ) statement kan herschreven worden als: { expressie1; while ( expressie2 ) { statement expressie3; } }
12 FLOWCHART VAN EEN TYPISCHE “FOR” HERHALINGSSTRUCTUUR Fig. 5.4Flowchart 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
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 )
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
15 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; // sommeer de even gehele getallen van 2 tot en met for ( int number = 2; number <= 100; number += 2 ) 16 total += number; // toon het resultaat 19 JOptionPane.showMessageDialog( null, "The sum is " + total, 20 "Sum Even Integers from 2 to 100", 21 JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // beëindig de applicatie } // einde methode main } // einde klasse Sum
16 12 int total = 0; // sommeer de even gehele getallen van 2 tot en met for ( int number = 2; number <= 100; number += 2 ) 16 total += number; // 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
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 jaren a = kapitaal na n jaar Het kapitaal MET de samengestelde intrest wordt voor de eerste 10 jaar weergegeven. gebruikt een for-herhalingsstructuur. VOORBEELD 2
18 1 // Fig. 5.6: Interest.java 2 // Berekening van samengestelde interest 3 4 // Java core packages 5 importjava.text.NumberFormat; 6 importjava.util.Locale; 7 8 // Java extension packages 9 importjavax.swing.JOptionPane; 10 importjavax.swing.JTextArea; public classInterest 13 { 14 // de uitvoering van de Java applicatie begint bij de main methode 15 public static voidmain( Stringargs[] ) 16 { 17 doubleamount, principal =1000.0, rate =0.05; // 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); // creëer JtextArea om de uitvoer te laten zien 25 JTextArea outputTextArea=newJTextArea(); // plaats de eerste lijn tekst in outputTextArea 28 outputTextArea.setText("Year\tAmounton deposit\n"); // bereken het bedrag in deposito voor elk van de tien jaren 31 for(intyear =1; year <=10; year++ ) 32 { 33 // bereken nieuw bedrag voor een specifiek jaar 34 amount = principal * Math.pow(1.0+ rate, year ); 35 Interest.java
19 Interest.java vervolg code + uitvoer 36 // voeg één lijn tekst toe aan outputTextArea 37 outputTextArea.append( year + "\t" + 38 moneyFormat.format( amount ) + "\n" ); }// einde for structuur // toon het resultaat 43 JOptionPane.showMessageDialog(null,outputTextArea, 44 "Compound Interest",JOptionPane.INFORMATION_MESSAGE); System.exit(0);// beëindig de applicatie }// einde methode main }// einde klasse Interest
20 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 = , rate = 0.05; 18 Lijn 17 Java stockeert floating-point getallen in variabelen van het type double (of float)
21 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 ); // creëer JtextArea om de uitvoer te laten zien 25 JTextArea outputTextArea = new JTextArea(); // 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 ($)
22 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( rate, year ); // voeg één lijn tekst toe aan outputTextArea 37 outputTextArea.append( year + "\t" + 38 moneyFormat.format( amount ) + "\n" ); } // einde for structuur Lijn 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
// toon het resultaat 43 JOptionPane.showMessageDialog( null, outputTextArea, 44 "Compound Interest", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // beëindig de applicatie } // einde methode main } // einde klasse Interest
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!
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
26 1// 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; 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); 25 System.exit(0); 26} // einde methode main 27 } // einde klasse DoWhileControle
27 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 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!
28 FLOWCHART VAN DE “DO/WHILE” HERHALINGSSTRUCTUUR actie(s) conditie true false Fig. 5.10Flowchart van de do/while herhalingsstructuur.
DE “SWITCH” MEERVOUDIGE SELECTIESTRUCTUUR switch structuur wordt gebruikt voor meervoudige selecties: switch (var) { case label1: statement1 break; case label2: statement2 break; default: statement3 [ break;] }
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
31 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 // initialiseeer de applet door de keuze van de gebruiker te verkrijgen 14 public void init() 15 { 16 String input; // input van de gebruiker // 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"); // converteer de input van de gebruiker naar een int 25 choice = Integer.parseInt( input ); 26 } Verkrijg input van de gebruiker
32 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 ); // bepaal de te tekenen vorm op basis van de keuze van de gebruiker 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 verwerken 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 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 default: 53 g.drawString( "Invalid value entered", 54 10, 20 + i * 15 ); } // einde switch structuur } // einde for structuur } // einde paint methode } // einde klasse SwitchTest
33 SWITCHTEST.JAVA: OUTPUT
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; 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 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 default: 53 g.drawString( "Invalid value entered", 54 10, 20 + i * 15 ); } // 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
35 FLOWCHART VAN DE “SWITCH” MEERVOUDIGE SELECTIESTRUCTUUR break case a actie(s) case b actie(s) case z actie(s) default actie(s) case a case b case z true false Fig. 5.8De switch meervoudige selectiestructuur.
36 Zet de volgende geneste if-structuren om in een switch – case-structuur 1. 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; } 2.int x, y = 0; // invoer van een waarde voor x if (x == 100 || x == 150 || x == 170 || x == 199) y++;
37 OPLOSSINGEN 1. 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; }
38 OPLOSSINGEN 2.int x, y = 0; // invoer van een waarde voor x switch (x) { case 100 : case 150 : case 170 : case 199 : y++; }
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
40 1 // Fig. 5.11:BreakTest.java 2 // Gebruik van het break statement in een for structuur 3 4 // Java extension packages 5 importjavax.swing.JOptionPane; 6 7 public classBreakTest 8 { 9 // de uitvoering van de Java applicatie begint bij de main methode 10 public static voidmain( Stringargs[] ) 11 { 12 String output =""; 13 intcount; // 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 == output += count +" ; }// einde for structuur output +="\nBrokeout of loop at count = "+ count; 27 JOptionPane.showMessageDialog(null, output ); System.exit(0);// beëindig de applicatie }// einde methode main }// einde klasse BreakTest BreakTest.java Voorbeeld met break statement
41 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 == output += count + " "; } // einde for structuur Lijn 16 Herhaal 10 keer Lijn 20 ga uit de for structuur (break) wanneer count gelijk is aan 5
42 1 // Fig. 5.12:ContinueTest.java 2 // Gebruik van het continue statement in een for structuur 3 4 // Java extension packages 5 importjavax.swing.JOptionPane; 6 7 public classContinueTest 8 { 9 // de uitvoering van de Java applicatie begint bij de main methode 10 public static voidmain( Stringargs[] ) 11 { 12 String output =""; // herhaal 10 keer 15 for(intcount =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 == output += count +" ; }// einde for structuur output +="\nUsedcontinue to skip printing 5"; 27 JOptionPane.showMessageDialog(null, output ); System.exit(0);// beëindig de applicatie }// einde methode main }// einde klasse ContinueTest ContinueTest.java Voorbeeld met continue statement
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 code 20 // in de lus over enkel als count == output += count + " "; } // einde for structuur Lijn 15 Herhaal 10 keer Lijn 19 Sla lijn 22 over en ga verder naar lijn 15 als count 5 is
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)
45 WAARHEIDSTABEL CONDITIONELE EN (&&)
46 WAARHEIDSTABEL CONDITIONELE OF (||)
47 WAARHEIDSTABEL LOGISCHE EXCLUSIEVE OF (^)
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) of // (y = 0)
49 WAARHEIDSTABEL LOGISCHE NIET (!)
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
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!
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!!!
53 1 // Fig. 5.19:LogicalOperators.java 2 // Demonstratie van de logische operatoren 3 4 // Java extension packages 5 importjavax.swing.*; 6 7 public classLogicalOperators 8 { 9 // de uitvoering van de Java applicatie begint bij de main methode 10 public static voidmain( Stringargs[] ) 11 { 12 // creëer een JTextArea om de resultaten te laten zien 13 JTextArea outputArea=newJTextArea(17,20); // hang de JTextArea aan een JScrollPane, zodat de gebruiker kan 16 // scrollen door de resultaten 17 JScrollPane scroller=newJScrollPane(outputArea); String output; // 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); // creëer de waarheidstabel voor de || operator 29 output +="\n\nLogicalOR (||)"+ 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
54 Logical Operators.java vervolg "Truth Tables",JOptionPane.INFORMATION_MESSAGE); 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
}// einde methode main }// einde klasse LogicalOperators LogicalOperators.java vervolg
56 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 waarheidstabel logische EN
57 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 waarheidstabel logische OF
58 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 waarheidstabel voor de booleaanse logische EN
59 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 waarheidstabel voor de booleaanse logische OF
60 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 Waarheidstabel voor de booleaanse logische exclusieve OF
61 56 // creëer de waarheidstabel voor de ! operator 57 output += "\n\nLogical NOT (!)" + 58 "\n!false: " + ( !false ) + 59 "\n!true: " + ( !true ); 60 Lijn Waarheidstabel voor de logische NIET
62 PRECEDENTIE EN ASSOCIATIVITEIT VAN DE OPERATOREN
SAMENVATTING GESTRUCTUREERD PROGRAMMEREN Sequentiestructuur “ingebouwd” in Java Selectiestructuren if, if/else en switch Herhalingsstructuren while, do/while en for
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.
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
66 OEFENINGEN Hoofdstuk 5
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:
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:
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 = k ); g)System.out.println( !( k > m ) ); Welke output geven volgende statements?
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…
71 OPLOSSINGEN Hoofdstuk 5
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:
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:
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 = k ); false g)System.out.println( !( k > m ) ); false Welke output geven volgende statements?
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…
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
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
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
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