PowerPoint-presentatie

advertisement
HOOFDSTUK 4
CONTROLESTRUCTUREN (DEEL 1)
4.1.
INTRODUCTIE
Waarom controlestructuren?
 principe van gestructureerd programmeren
 controlestructuren helpen om
objecten op te bouwen
en ze te manipuleren
(zie hoofdstuk 8)
1
4.2.
ALGORITMEN
Een algoritme
is een procedure om een probleem op te lossen in termen
van
• de opdrachten die uitgevoerd moeten worden
• de volgorde waarin ze moeten uitgevoerd worden
Programmacontrole
is de volgorde specifiëren in dewelke de acties uitgevoerd
moeten worden in een programma
 controlestructuren helpen hierbij
2
4.3.
PSEUDOCODE
Pseudocode is …
• een informele taal om algoritmen te ontwikkelen
• GEEN taal die uitgevoerd wordt door computers
• een taal die softwareontwikkelaars helpt bij het
“uitdenken” van algoritmen
• meestal beperkt tot de uitvoerbare statements, geen
declaraties
3
4.4.
CONTROLESTRUCTUREN
Sequentiële uitvoering
De statements in een programma worden één voor één uitgevoerd in
de volgorde waarin ze geschreven zijn.
Overdracht van de controle
Drie controleopdrachten kunnen de volgorde specifiëren:
• sequentiestructuur
• selectiestructuur
• herhalingsstructuur
Flowchart
Grafische representatie van een algoritme
Lijnen geven de volgorde aan waarin de acties worden uitgevoerd.
4
FLOWCHART VAN EEN SEQUENTIESTRUCTUUR
Lijnen
Actiesymbolen
total<- total + grade
counter <- counter + 1
total = total + grade ;
counter = counter1;
+
Connectiesymbolen
Fig 4.1 Flowchart van een sequentiestrructuur in Java.
5
JAVA SLEUTELWOORDEN
Java Sleutelwoorden
abstract
boolean
break
byte
case
catch
do
final
implements
long
private
static
class
else
float
instanceof
new
public
switch
continue
extends
for
int
null
return
synchronized
default
false
if
interface
package
short
this
transient
while
true
try
char
double
finally
import
native
protected
super
throw
throws
void
volatile
Sleutelwoorden die
gereserveerd zijn maar
die niet worden gebruikt
in Java
const
goto
Fig. 4.2 Java sleutelwoorden.
6
CONTROLESTRUCTUREN IN JAVA
• Java heeft een “ingebouwde” sequentiestructuur
• Java voorziet drie selectiestructuren
 if
 if/else
 switch-case
• Java voorziet drie herhalingsstructuren
 while
 do/while
 for
• Elk van deze woorden is een Java-sleutelwoord
7
4.5.
DE “IF” SELECTIESTRUCTUUR
if (voorwaarde) statement
 Het statement wordt alleen uitgevoerd als de voorwaarde
WAAR is (true).
 Structuur met één ingang en één uitgang.
8
 Voorbeeld in pseudocode:
Als punten >= 60
dan print "Geslaagd!"
Eind-als
Decisiesymbool
punten >= 60
true
print “Geslaagd”
false
Fig 4.3 Flowchart van de enkelvoudige selectiestructuur if
9
 Voorbeeld in pseudocode:
Als punten >= 60
dan print "Geslaagd!"
Eind-als
 JAVA:
if ( punten >= 60 )
System.out.println("Geslaagd");
10
4.6.
DE “IF/ELSE” SELECTIESTRUCTUUR
if (voorwaarde) statement1
else statement2
 Het statement1 wordt enkel uitgevoerd wanneer de
voorwaarde WAAR (true) is.
 Het alternatieve statement, namelijk statement2 wordt
enkel uitgevoerd wanneer de voorwaarde VALS (false) is.
11
 Voorbeeld in pseudocode:
Als punten >= 60
dan print "Geslaagd!"
anders print "Niet geslaagd!"
Eind-als
false
true
punten >= 60
print “niet geslaagd”
print “geslaagd”
Fig 4.4 Flowchart van de dubbele selectiestructuur if/else.
12
 Voorbeeld in pseudocode:
Als punten >= 60
dan print "Geslaagd!"
anders print "Niet geslaagd!"
Eind-als
 JAVA:
if ( punten >= 60 )
System.out.println("Geslaagd");
else
System.out.println("Niet geslaagd");
13
DE RELATIONELE OPERATOREN
Operator
In Java
>
>
groter dan
<
<
kleiner dan

>=
groter dan of gelijk aan

<=
kleiner dan of gelijk aan
=
==
exact gelijk

!=
verschillend
14
WAAROM LOGISCHE OPERATOREN?
 In sommige situaties hebben we meer nodig dan alleen maar
relationele operatoren.
 Denk maar aan volgende situatie: als de variabele temp gelegen
is tussen 22 en 25 dan hebben we een ideale zomertemperatuur.
We doen dit met volgende test:
temp >= 22 en temp <= 25
Om deze test te kunnen uitschrijven hebben we de logische enoperator nodig.
In JAVA schrijven we de gecombineerde voorwaarde als volgt :
(temp >= 22 && temp <= 25)
15
DE LOGISCHE OPERATOREN
Logische operator
In Java
en
&&
of
||
niet
!
16
DE LOGISCHE EN-OPERATOR
 De logische en-operator werkt met twee operanden die false
of true kunnen zijn.
(temp >= 22 && temp <= 25)
1ste operand
2de operand
 Een voorwaarde met de en-operator && heeft als resultaat
true als beide operanden true leveren.
 Als één van beide operanden false levert, of beide leveren
false, dan levert de en-operator && ook false op.
17
DE LOGISCHE OF-OPERATOR
 De logische of-operator werkt ook met twee operanden die
false of true kunnen zijn.
(temp == 20 || temp == 30)
 Als temp de waarde 20 heeft, dan levert de gecombineerde
voorwaarde true op.
 Als temp de waarde 30 heeft, dan levert de gecombineerde
voorwaarde true op.
 Maar als temp bv. de waarde 25 heeft, dan levert de
voorwaarde false op, omdat beide operanden nu de waarde
18
false hebben.
DE LOGISCHE NIET-OPERATOR
 De logische niet-operator werkt met één operand die false of
true kan zijn.
(!(temp == 20 || temp == 30))
 De niet-operator keert de waarheidswaarde om: true wordt
false en false wordt true.
 Als temp de waarde 20 of de waarde 30 heeft, dan levert de
voorwaarde false op.
 In de andere gevallen levert de voorwaarde true op.
19
Oefeningen: stel de voorwaarde op in Java
1. x moet tussen 1 en 10 liggen (beide grenzen inbegrepen)
X>=1 && x<=10
2. x moet negatief zijn en groter dan –5
X<0 && x>-5
3. x moet groter zijn dan 999, kleiner dan of gelijk aan
9999 en oneven
X>999 && x<=9999 && x%2 !=0
4. x mag niet gelijk zijn aan 0 of x moet deelbaar zijn door 10
X!=0 || x%10==0
20
DE CONDITIONELE OPERATOR
 In de conditionele operator komt altijd een vraagteken (?)
en een dubbel punt (:) voor.
voorwaarde ? expressie1 : expressie2
 Indien de voorwaarde waar is, wordt expressie1
uitgevoerd.
 Indien de voorwaarde niet waar is, wordt expressie2
uitgevoerd.
21
DE CONDITIONELE OPERATOR
• Voorbeeld:
if (a < b)
z = a + 1;
else
z = b – 1;
is equivalent met
z = ( a < b ? a + 1 : b - 1);
22
DE CONDITIONELE OPERATOR
• Voorbeeld:
if (a < b)
System.out.println(a);
else
System.out.println(b);
is equivalent met
System.out.println(a < b? a : b);
Oplossing: System.out.println(aantal==1?student:studenten);
23
DE CONDITIONELE OPERATOR
• Oefening:
if (aantal == 1)
System.out.println("Student");
else
System.out.println("Studenten");
is equivalent met
?
24
GENESTE IF/ELSE SELECTIESTRUCTUREN
• Voorbeeld: Drie getallen worden ingegeven.
Het grootste getal wordt op het scherm weergegeven.
if (getal1 > getal2)
if (getal1 > getal3)
System.out. println(getal1);
else
// getal1 <= getal3
System.out. println(getal3);
else
// getal1 <= getal2
if (getal2 > getal3)
System.out. println(getal2);
else
// getal2 <= getal3
System.out. println(getal3);
25
GENESTE IF/ELSE SELECTIESTRUCTUREN
if (getal1 > 10)
if (getal2 > 20)
System.out. println(“getal1 > 10 en getal2 > 20”);
else
System.out. println(“ ??? ”);
Behoort de else bij “if (getal1 > 10)” of bij “if (getal2 > 20)”?
26
if (getal1 > 10)
if (getal2 > 20)
System.out. println(“getal1 > 10 en getal2 > 20”);
else
System.out. println(“ ??? ”);
true
false
getal1 > 10
false
true
getal2 > 20
print “???”
print “getal1 > 10 en getal2 > 20”
27
GENESTE IF/ELSE SELECTIESTRUCTUREN
 We wensen de else bij “if (getal1 > 10)” en niet
bij “if (getal2 > 20)”:
if (getal1 > 10)
{
if (getal2 > 20)
System.out. println(“getal1 > 10 en getal2 > 20”);
}
else
System.out. println(“ getal <= 10 ”);
28
if (getal1 > 10)
{
if (getal2 > 20)
System.out. println(“getal1 > 10 en getal2 > 20”);
}
else
System.out. println(“ getal <= 10 ”);
false
getal1 > 10
true
print “getal <= 10”
getal2 > 20
true
print “getal1 > 10 en getal2 > 20”
false
29
Oefeningen : stel voor met Java-code
 als x >= 0 dan druk "positief" anders druk "negatief«
If (x>0) { System.out.println(« positief »); else {
System.out.println(« negatief »); }
 als temp <= 10 dan druk "koud"
als temp tussen 10 en 20 ligt dan druk "goed"
als temp >= 20 dan druk "warm"
 als x >= 0 en even dan druk "positief en even"
als x >= 0 en oneven dan druk "positief en oneven"
als x < 0 en even dan druk "negatief en even"
30
4.7.
DE HERHALINGSSTRUCTUUR “WHILE”
while (voorwaarde) statement
 Het statement wordt herhaald zolang de voorwaarde
WAAR blijft!
 Zorg ervoor dat de voorwaarde beïnvloed wordt in het
statement, anders oneindige lus!
31
 Voorbeeld in pseudocode:
product <- 2
Herhaal zolang product <= 1000
product <- product * 2
Eind-herhaal
product <- 2
true
product <= 1000
product = 2 * product
false
Fig 4.5 Flowchart van de while herhalingsstructuur.
32
 Voorbeeld in pseudocode:
product <- 2
Herhaal zolang product <= 1000
product <- product * 2
Eind-herhaal
 JAVA:
int product = 2;
while ( product <= 1000 )
product = 2 * product;
33
4.8.
ALGORITMEN FORMULEREN:
VOORBEELD 1 (HERHALING MET EEN TELLER)
 Teller
variabele die het aantal keer dat een reeks statements
wordt uitgevoerd, bijhoudt en controleert
 Average1.java
• is een programma dat het gemiddelde van de punten
van 10 studenten berekent
• gebruikt een teller om de herhaling bij te houden
34
ALGORITMEN FORMULEREN: VOORBEELD 1
PSEUDOCODE
totaal <- 0
puntenteller <- 1
Herhaal zolang puntenteller <= 10
lees punten in
totaal <- totaal + punten
puntenteller <- puntenteller + 1
Eind-herhaal
klasgemiddelde <- totaal / 10
Druk klasgemiddelde
Fig. 4.6 Pseudocode van het algoritme dat herhaling door
middel van een teller gebruikt om het probleem van het
bepalen van het gemiddelde van een klas op te lossen
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Fig. 4.7: Average1.java
// Programma voor klasgemiddelde met herhaling via teller
// Java extension packages
import javax.swing.JOptionPane;
Declareer variabelen;
gradeCounter is de teller
public class Average1
{
// De uitvoering van de Java applicatie begint bij de “main” methode
public static void main( String args[] )
{
int total,
// som van de punten ingevoerd door de gebruiker
Blijf herhalen zolang
gradeCounter,
// aantal ingevoerde punten
gradeCounter kleiner dan of
// puntenwaarde
grade ,
average;
// gemiddelde van alle
punten
gelijk
is aan 10
String gradeString; // punten zoals ingetypt door de gebruiker
Average1.java
// Initialisatiefase
total = 0;
// het totaal initialiseren op nul
gradeCounter = 1;
// voorbereiding op herhaling
// Verwerkingsfase
while ( gradeCounter <= 10 )
// herhaal 10 keer
{
// vraag om input en lees punten van gebruiker
gradeString = JOptionPane.showInputDialog(
"Enter integer grade: " );
// converteer punten van String naar integer
grade = Integer.parseInt ( gradeString );
// voeg de puntenwaarde toe aan het totaal
total = total + grade ;
36
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 }
// voeg 1 toe aan teller gradeCounter
gradeCounter = gradeCounter + 1;
}
// einde while structuur
// Eindfase
average = total / 10;
// voer een gehele deling uit
// laat het gemiddelde van de examenpunten zien
JOptionPane.showMessageDialog( null,
"Class average is " + average, "Class Average",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
Average1.java
vervolg
// beëindig het programma
// einde methode main
// einde klasse Average1
37
UITVOERING AVERAGE1.JAVA (vervolg)
38
12
13
14
15
16
17
18
19
20
int total,
// som van de punten ingevoerd door de gebruiker
gradeCounter,
// aantal ingevoerde punten
grade,
// puntenwaarde
average;
// gemiddelde van alle punten
String gradeString; // punten zoals ingetypt door de gebruiker
// Initialisatiefase
total = 0;
// het totaal initialiseren op nul
gradeCounter = 1;
// voorbereiding op herhaling
 Lijn 12
• declaratie van de teller “gradeCounter”.
 Lijn 20
• de teller “gradeCounter” wordt op 1 geïnitialiseerd.
39
23 while ( gradeCounter <= 10 ) // herhaal 10 keer
24 {
25
// vraag om input en lees punten van gebruiker
26
gradeString = JOptionPane.showInputDialog(
27
"Enter integer grade: " );
28
29
// converteer punten van String naar integer
30
grade = Integer.parseInt( gradeString );
31
32
// voeg de puntenwaarde toe aan het totaal
33
total = total + grade;
34
35
// voeg 1 toe aan teller gradeCounter
36
gradeCounter = gradeCounter + 1;
37
38 } // einde while structuur
 Lijn 23
• zolang de voorwaarde “gradeCounter <= 10” waar is, wordt de body
van de while-statement (lijn 24 t.e.m. 38) uitgevoerd.
 Lijn 36
• de teller “gradeCounter” wordt met één verhoogd.
40
39
40 // Eindfase
41 average = total / 10; // perform integer division
42
43 // laat het gemiddelde van de examenpunten zien
44 JOptionPane.showMessageDialog( null,
45
"Class average is " + average, "Class Average",
46
JOptionPane.INFORMATION_MESSAGE );
47
48 System.exit( 0 );
// beëindig het programma
49
50 } // einde methode main
51
52} // einde klasse Average1
 Lijn 44-46
• de gemiddelde waarde van de 10 ingegeven getallen
wordt weergegeven.
41
4.9.
ALGORITMEN FORMULEREN:
TOP-DOWN EN MET STAPSGEWIJZE VERFIJNING
VOORBEELD 2 (HERHALING MET “SCHILDWACHT”)
 Sentinel of “schildwacht”
waarde die het einde van de invoer van data aangeeft
 Average2.java
• is een programma dat een herhaling voor onbepaalde
tijd bevat
• gebruikt de “schildwacht” waarde –1 om de herhaling te
beëindigen
42
ALGORITMEN FORMULEREN: VOORBEELD 2
PSEUDOCODE
totaal <- 0
puntenteller <- 0
lees ( de eerste) punten in (mogelijk de “schildwacht”)
Herhaal zolang punten != -1
punten <- punten + totaal
puntenteller <- puntenteller + 1
lees (volgende) punten in (mogelijk de “schildwacht”)
Eind-herhaal
Als puntenteller != 0
klasgemiddelde <- totaal / puntenteller
Druk klasgemiddelde af
anders
Druk “Er werden geen punten ingevoerd”
Eind-als
Fig. 4.8 Pseudocode van het algoritme dat een herhaling met gebruik van
een “sentinel” of “schildwacht” bevat om het probleem van het
gemiddelde van een klas op te lossen.
43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Fig. 4.9: Average2.java
// Klasgemiddelde programma met herhaling met behulp van een “schildwacht”
// Java core packages
import java.text.DecimalFormat;
// Java extension packages
import javax.swing.JOptionPane;
public class Average2
{
// De uitvoering van een
public static void main(
{
int gradeCounter, //
grade ,
//
total;
//
double average;
//
String input;
//
Average2.java
Java applicatie begint bij de main method
String args[] )
aantal ingevoerde punten
puntenwaarde
som van de punten
gemiddelde van alle punten
punten zoals ingetypt door de gebruiker
// Initialisatiefase
total = 0;
// het totaal initialiseren
gradeCounter = 0; // voorbereiding van de herhaling
// Verwerkingsfase
// vraag om input en lees de punten van de gebruiker
input = JOptionPane.showInputDialog(
"Enter Integer Grade, -1 to Quit:" );
// converteer de punten van een String naar een integer
grade
= Integer.parseInt( input );
44
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
while ( grade != - 1
)
{
herhaal tot gradeCounter
// voeg puntenwaarde toe aan totaal
is aan “schildwacht” waarde
total = total + grade ;
gelijk
(-1)
// voeg 1 toe aan teller gradeCounter
gradeCounter = gradeCounter + 1;
// vraag om input en lees punten van gebruiker
input = JOptionPane.showInputDialog(
"Enter Integer Grade, -1 to Quit:"
Rond);getallen
af tot op
één een
honderdste
naar
integer
Average2.java
vervolg
// converteer punten van een String
grade
= Integer.parseInt( input );
}
// Eindfase
DecimalFormat twoDigits = new DecimalFormat( "0.00" );
if ( gradeCounter != 0 )
{
average = (double) total / gradeCounter;
// laat gemiddelde van de examenpunten zien
JOptionPane.showMessageDialog( null,
"Class average is " + twoDigits.format( average ),
"Class Average", JOptionPane.INFORMATION_MESSAGE );
}
else
JOptionPane.showMessageDialog( null,
"No grades were entered", "Class Average",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
// beëindig de applicatie
45
VERVOLG CODE + UITVOERING
AVERAGE2.JAVA
67
68
69 }
}
// einde methode main
// einde klasse Average2
46
15
16
17
18
19
20
21
22
23
24
int gradeCounter, // aantal ingevoerde punten
grade,
// puntenwaarde
total;
// som van de punten
double average;
// gemiddelde van alle punten
String input;
// punten zoals ingetypt door de gebruiker
// Initialisatiefase
total = 0;
// het totaal initialiseren
gradeCounter = 0; // voorbereiding van de herhaling
 Lijn 22
• “total” wordt op 0 geïnitialiseerd. De som van de
ingegeven getallen zal in “total” bijgehouden worden.
 Lijn 23
• “gradeCounter” wordt op 0 geïnitialiseerd. Deze
variabele zal bijhouden hoeveel getallen de gebruiker
heeft ingegeven.
47
26
27
28
29
30
31
32
33
34
// vraag om input en lees de punten van de gebruiker
input = JOptionPane.showInputDialog(
"Enter Integer Grade, -1 to Quit:" );
// converteer de punten van een String naar een integer
grade = Integer.parseInt( input );
while ( grade != -1 )
{
 Lijn 27-28
• Een eerste getal wordt aan de gebruiker gevraagd.
 Lijn 33
• Indien de gebruiker de waarde –1 heeft ingegeven (lijn
27-28), dan wordt de body van de while-statement niet
uitgevoerd.
48
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
while ( grade != -1 )
{
// voeg puntenwaarde toe aan totaal
total = total + grade;
// voeg 1 toe aan teller gradeCounter
gradeCounter = gradeCounter + 1;
// vraag om input en lees punten van gebruiker
input = JOptionPane.showInputDialog(
"Enter Integer Grade, -1 to Quit:" );
// converteer punten van een String naar een integer
grade = Integer.parseInt( input );
}
 Lijn 33
• zolang de gebruiker de waarde –1 niet heeft ingegeven, wordt de
body van de while-statement (lijn 34 t.e.m. 47) uitgevoerd.
 Lijn 42-43
• een nieuw getal wordt aan de gebruiker gevraagd.
49
50 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
51
52 if ( gradeCounter != 0 )
53 {
average = (double) total / gradeCounter;
54
55
// laat gemiddelde van de examenpunten zien
56
JOptionPane.showMessageDialog( null,
57
"Class average is " + twoDigits.format( average ),
58
"Class Average", JOptionPane.INFORMATION_MESSAGE );
59 }
60 else
61
JOptionPane.showMessageDialog( null,
62
"No grades were entered", "Class Average",
63
JOptionPane.INFORMATION_MESSAGE );
64
65 System.exit( 0 );
// beëindig de applicatie
66
67 } // einde methode main
68
69} // einde klasse Average2
 Lijn 52
• Controleren indien de gebruiker al dan niet direct de
waarde –1 heeft ingegeven (lijn 27-28).
50
4.10.
ALGORITMEN FORMULEREN:
TOP-DOWN EN MET STAPSGEWIJZE VERFIJNING
VOORBEELD 3 (GENESTE CONTROLESTRUCTUREN)
 Nesting van controlestructuren
 Analysis.java
• een analyse maken van de resultaten behaald door
10 studenten (1 = geslaagd, 2 = niet-geslaagd)
• een if-else-statement in een while-statement
gebruiken.
51
ALGORITMEN FORMULEREN: VOORBEELD 3
PSEUDOCODE
geslaagden <- 0
niet_geslaagden <- 0
aantal_studenten <- 1
Herhaal zolang aantal_studenten <= 10
lees (volgende) resultaat in
Als resultaat = 1
geslaagden <- geslaagden + 1
anders
niet_geslaagden <- niet_geslaagden + 1
Eind-als
aantal_studenten <- aantal_studenten + 1
Eind-herhaal
Druk geslaagden en niet-geslaagden af
Als geslaagden > 8
Druk“Raise tuition”
Eind-als
Fig 4.10 Pseudocode voor examenresultaten probleem.
52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Fig. 4.11: Analysis.java
// Analyse van examenresultaten.
// Java extension packages
import javax.swing.JOptionPane;
Herhaal tot student teller
groter is dan 10
public class Analysis
{
// De uitvoering van een Java applicatie begint bij de main methode
public static void main( String args[] )
{
// initialiseren van de variablen in declaraties
int passes = 0,
// aantal geslaagden
failures = 0,
// aantal niet geslaagden
studentCounter = 1,
// studententeller
result;
// één examenresultaat
String input,
// door de gebruiker ingetikte waarde
output;
// uitvoerstring
Analysis.java
// verwerk 10 studenten; herhaling met teller
while ( studentCounter <= 10 )
Geneste controlestructuur
{
// verkrijg resultaat van gebruiker
input = JOptionPane.showInputDialog(
"Enter result (1=pass,2=fail)" );
// converteer resultaat naar int
result = Integer.parseInt( input );
// verwerk resultaat
if ( result == 1 )
passes = passes + 1;
else
failures = failures + 1;
53
VERVOLG CODE ANALYSIS.JAVA
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 }
studentCounter = studentCounter +
1 ;
}
// eindfase
output = "Passed: " + passes +
"\nFailed: " + failures;
if ( passes > 8 )
output = output + "\nRaise Tuition";
JOptionPane.showMessageDialog( null, output,
"Analysis of Examination Results",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
// beëindig applicatie
// einde methode main
// einde klasse Analysis
54
UITVOERING ANALYSIS.JAVA
9 keer
55
12 // initialiseren van
13 int passes = 0,
14
failures = 0,
15
studentCounter =
16
result;
17 String input,
//
18
output;
//
19
de variabelen in declaraties
// aantal geslaagden
// aantal niet geslaagden
1,
// studententeller
// één examenresultaat
door de gebruiker ingetikte waarde
uitvoerstring
 Lijn 13
• De teller “passes” zal het aantal geslaagde studenten
bijhouden.
 Lijn 14
• De teller “failures” zal het aantal niet geslaagde
studenten bijhouden.
 Lijn 15
• De teller “studentCounter” wordt op 1 geïnitialiseerd.
Deze teller zullen we in de while-voorwaarde gebruiken. 56
20 // verwerk 10 studenten; herhaling met teller
21 while ( studentCounter <= 10 )
22 {
23
// verkrijg resultaat van gebruiker
24
input = JOptionPane.showInputDialog(
25
"Enter result (1=pass,2=fail)" );
26
27
// converteer resultaat naar int
28
result = Integer.parseInt( input );
29
30
// verwerk resultaat
31
if ( result == 1 )
32
passes = passes + 1;
33
else
34
failures = failures + 1;
35
36
studentCounter = studentCounter + 1;
37 }
 Lijn 22-37
• De body van het while-statement zal 10 keer uitgevoerd
worden.
 Lijn 31-34
57
• if-statement in de body van het while-statement.
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 }
// eindfase
output = "Passed: " + passes +
"\nFailed: " + failures;
if ( passes > 8 )
output = output + "\nRaise Tuition";
JOptionPane.showMessageDialog( null, output,
"Analysis of Examination Results",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
// terminate application
// einde methode main
// einde klasse Analysis
 Lijn 46-48
• Het aantal geslaagde en het aantal niet geslaagde
studenten worden weergegeven op het scherm.
58
4.11. SAMENGESTELDE
TOEKENNINGSOPERATOREN
 Uitdrukkingen voor toekenningen afkorten
• Heel vaak willen we iets bij een variabele optellen.
int teller = 1;
teller = teller + 1;
teller = teller + 3;
• In JAVA bestaat er een kortere en meer efficiënte vorm
teller += 1;
teller += 3;
59
4.11. SAMENGESTELDE TOEKENNINGSOPERATOREN
 Algemeen :
x=x+a
kunnen we schrijven als
x += a;
 De volgende expressies spreken nu voor zichzelf:
x -= a;
x *= a;
x /= a;
x %= a;
60
REKENKUNDIGE TOEKENNINGSOPERATOREN
Toekennings
operator
Stel:
int c = 3,
d = 5, e = 4,
f = 6, g = 12;
+=
-=
*=
/=
%=
Voorbeeld
uitdrukking
Uitleg
c
d
e
f
g
c
d
e
f
g
+=
-=
*=
/=
%=
7
4
5
3
9
=
=
=
=
=
c
d
e
f
g
Kent toe
+
*
/
%
7
4
5
3
9
10 aan c
1 aan d
20 aan e
2 aan f
3 aan g
Fig. 4.12 Arithmetische toekenningsoperatoren.
61
4.12.
INCREMENT- EN DECREMENTOPERATOREN
 In het bijzonder komt het vaak voor, dat een telvariabele
(bijvoorbeeld teller) met 1 moet verhoogd of verlaagd
worden.
In plaats van
teller += 1;
teller -= 1;
kunnen we dit nog korter schrijven:
teller++;
teller--;
of
++teller;
--teller;
62
4.12.
INCREMENT- EN DECREMENTOPERATOREN
 Unaire increment operator (++)
• vermeerdert de waarde van de variabele met 1
 Unaire decrement operator (--)
• vermindert de waarde van de variabele met 1
63
 Wat is nu het verschil tussen teller++ en ++teller?
int teller1, resul1, teller2, resul2;
teller1 = 0;
teller2 = 0;
resul1 = (teller1++);
resul2 = (++teller2);
System.out.println("teller1 : " + teller1);
System.out.println(" resul1 : " + resul1);
System.out.println(" teller2 : " + teller2);
System.out.println(" resul2 : " + resul2);
De uitvoer van dit programma is:
teller1 : 1
resul1 : 0
teller2 : 1
resul2 : 1
64
4.12.
INCREMENT- EN DECREMENTOPERATOREN
resul1 = (teller1++);
resul2 = (++teller2);
 Het statement “resul1 = (teller1++);” betekent, dat eerst
de waarde van teller1 (=0) wordt toegekend aan de variabele
resul1. Daarna wordt de waarde van variabele “teller1” met
één verhoogd.
 Het statement “resul2 = (++teller2);” betekent, dat eerst
de waarde van de variabele “teller2” met één wordt verhoogd
(dus teller2 = 0 +1). Vervolgens wordt de waarde van teller2
(=1) toegekend aan de variabele resul2.
65
4.12.
INCREMENT- EN DECREMENTOPERATOREN
teller++;  ++ is een post-increment operator
++teller;  ++ is een pre-increment operator
teller--;  -- is een post-decrement operator
--teller;  -- is een pre-decrement operator
66
INCREMENT EN DECREMENT OPERATOREN
Operator
Voorbeeldexpressie
Uitleg
++
Wordt
genoemd
preincrement
++a
++
postincrement
a++
--
predecrement
--b
--
postdecrement
b--
Vermeerder a met 1 en gebruik
vervolgens de nieuwe waarde van a in
de expressie waarin a voorkomt.
Gebruik de huidige waarde van a in de
expressie waarin a voorkomt en
vermeerder a vervolgens met 1.
Verminder b met 1 en gebruik
vervolgens de nieuwe waarde van b in
de expressie waarin b voorkomt.
Gebruik de huidige waarde van b in de
expressie waarin b voorkomt en
verminder b vervolgens met 1.
Fig. 4.13 De increment en decrement operatoren.
67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Fig. 4.14: Increment.java
// Preincrementing en postincrementing
public class Increment
{
// De uitvoering van de Java applicatie begint bij de main methode
public static void main( String args[] )
{
int c;
c = 5;
System.out.println( c ); // print 5
System.out.println( c++ );//print 5 en vermeerder c dan met 1
System.out.println( c ); // print 6
System.out.println();
// sla een lijn over
c = 5;
System.out.println( c ); // print 5
System.out.println( ++c );//vermeerder c eerst met 1, print 6
System.out.println( c ); // print 6
}
}
// end method main
// end class Increment
68
11
12
13
14
15
16
17
18
19
20
21
c = 5;
System.out.println( c ); // print 5
System.out.println( c++ );//print 5 en vermeerder c dan met 1
System.out.println( c ); // print 6
System.out.println();
// sla een lijn over
c = 5;
System.out.println( c ); // print 5
System.out.println( ++c );//vermeerder c eerst met 1, print 6
System.out.println( c ); // print 6
Lijn 13 voert een
postincrement uit op c
5
5
6
5
6
6
Lijn 20 voert een
preincrement uit op c
69
Oefening: geef de inhoud van a, b en c na
elk statement
int a = 0, b = 0, c = 0;
a = ++ b + ++ c;
// a = 2
b= 1
c= 1
a = b ++ + c ++;
// a = 2
b= 2
c= 2
a = ++ b + c ++;
// a = 5
b= 3
c= 3
a = b -- + c --;
// a = 6
b=2
c=2
70
PRECEDENTIE EN ASSOCIATIVITEIT
VAN DE OPERATOREN
 We kennen nu wiskundige-, relationele-, logische-, conditionele-,
increment- en decrement-operatoren. We zijn in staat om
complexe voorwaarden samen te stellen.
Veronderstel volgende complexe conditie:
5+25/12 > 6 && 33%11+1 < 2
Deze expressie bevat zowel wiskundige, relationele als logische
operatoren.
Mogen we gewoon de expressies evalueren van links naar rechts?
Neen, bepaalde operatoren hebben voorrang op andere.
71
PRECEDENTIE EN ASSOCIATIVITEIT
VAN DE OPERATOREN
Operatoren
()
Associativiteit
van links naar rechts
Type
haakjes
++ --
van rechts naar links
unair postfix
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 rechts naar links
conditioneel
van rechts naar links
toekenning
++ -- +
*
/
+
-
<
<= >
=
-
(type)
%
>=
+= -= *= /= %=
Fig. 4.15 Precedentie en associativiteit van de operatoren.
72
PRECEDENTIE EN ASSOCIATIVITEIT
VAN DE OPERATOREN

Voorbeeld:
5+25/12 > 6 && 33%11+1 < 2
5+
2 > 6 && 33%11 +1 < 2
5+
2 > 6 &&
0
+1 < 2
7
> 6 &&
0
+1 < 2
7
> 6 &&
1
<2
(true) &&
1
<2
(true) &&
(true)
(true)
73
PRECEDENTIE EN ASSOCIATIVITEIT
VAN DE OPERATOREN

Haakjes kunnen gebruikt worden om de prioriteiten te
negeren. Alles wat tussen de haakjes staat wordt altijd
het eerst uitgewerkt.

Bij complexe voorwaarden is het soms aangewezen
haakjes te gebruiken, om de lezer zonder meer duidelijk
te maken hoe de expressie wordt uitgewerkt.

Een belangrijke stelregel is: bij twijfel, gebruik altijd
haakjes.
74
4.13.
PRIMITIEVE DATATYPES
Primitieve types
“bouwblokken” voor ingewikkeldere types
Java is sterk getypeerd
alle variabelen in een Java programma MOETEN een type
hebben
Primitieve types in Java
zijn overdraagbaar over computerplatformen die Java
ondersteunen
75
DE PRIMITIEVE DATATYPES IN JAVA
Type
boolean
Grootte in bits
8
Waarden
true of false
Standaard
char
16
(ISO Unicode character set)
byte
8
’\u0000’ tot ’\uFFFF’
(0 tot 65535)
–128 tot +127
(–27 tot 27 – 1)
short
16
–32,768 tot +32,767
(–215 tot 215 – 1)
int
32
–2,147,483,648 tot +2,147,483,647
(–231 tot 231 – 1)
long
64
–9,223,372,036,854,775,808 tot
+9,223,372,036,854,775,807
(–263 tot 263 – 1)
float
32
double
64
Negatief bereik:
–3.4028234663852886E+38 tot
–1.40129846432481707e–45
Positief bereik:
1.40129846432481707e–45 tot
3.4028234663852886E+38
Negatief bereik:
–1.7976931348623157E+308 tot
–4.94065645841246544e–324
Positief bereik:
4.94065645841246544e–324 tot
1.7976931348623157E+308
Fig. 4.16
(IEEE 754 floating point)
(IEEE 754 floating point)
De primitieve datatypes in Java.
76
HET PRIMITIEVE DATATYPE : boolean
 Variabelen van het type boolean kunnen slechts twee
waarden bevatten: true of false
 Voorbeeld:
boolean gevonden;
int teZoekenGetal, getal;
String getalS;
gevonden = false;
teZoekenGetal = 20;
while (!(gevonden))
{
getalS = JOptionPane.showInputDialog( null, "Geef een getal");
getal = Integer.parseInt( getalS );
if (getal == teZoekenGetal)
gevonden = true;
}
77
HET PRIMITIEVE DATATYPE : char
 In variabelen van het type char kun je één letter of één ander
teken opslaan. Nooit meer dan één. Zo’n teken moet je in het
programma tussen apostrofs zetten, bijvoorbeeld de letter a als
‘a’, een punt als ‘.’, etc.
 De reden dat je apostrofs moet gebruiken is dat we de
compiler duidelijk willen maken dat het om een letter gaat, en
niet om bijvoorbeeld een variabele die de naam a heeft.
 Voorbeeld:
char letter1, letter2;
letter1 = 'a';
letter2 = '*';
78
HET PRIMITIEVE DATATYPE : byte
 In een variabele van het type byte kun je gehele getallen
van –128 t.e.m. 127 bewaren.
 Voorbeeld:
byte getal1, getal2, getal3;
getal1 = 50;
getal2 = -128;
getal3 = 127;
System.out.println(--getal2);
System.out.println(++getal3);
Uitvoer:
127
-128
79
HET PRIMITIEVE DATATYPE : short
 In een variabele van het type short kun je gehele getallen
van -32768 t.e.m. 32767 bewaren.
 Voorbeeld:
short getal1, getal2;
getal1 = -32768;
getal2 = 32767;
System.out.println(--getal1);
System.out.println(++getal2);
Uitvoer:
32767
-32768
80
HET PRIMITIEVE DATATYPE : int
 In een variabele van het type int kun je gehele getallen van
–2 147 483 648 tot 2 147 483 647 opbergen.
 Voorbeeld:
int getal1, getal2;
getal1 = 20;
getal2 = -450;
81
HET PRIMITIEVE DATATYPE : long
 In een variabele van het type long kun je gehele getallen
van –9 223 372 036 854 775 808 tot
9 223 372 036 854 775 807 opbergen.
 Voorbeeld:
long getal1, getal2;
getal1 = 2147483647; //bovengrens van int
getal2 = getal1 * 10;
System.out.println(getal2);
uitvoer: 21474836470
82
DE PRIMITIEVE DATATYPEN : float en double
 In veel gevallen waarin gerekend wordt, heb je reële
getallen nodig, zoals bijvoorbeeld 24.75. Voor reële getallen
kent het Engels de term floating-point getallen.
 Java heeft voor reële getallen twee verschillende primitieve
typen: float (storing single-precision floating-point) en
double (double-precision floating-point).
83
DE PRIMITIEVE DATATYPEN : float en double
 De nauwkeurigheid van getallen van het type float is 6
tot 7 cijfers. Dat lijkt misschien veel, maar leidt in de
praktijk al gauw tot grote onnauwkeurigheden door
afrondfouten.
 Getallen van het type double nemen meer geheugen in
beslag dan float, maar hebben een nauwkeurigheid van 15
cijfers.
84
DE PRIMITIEVE DATATYPEN : float en double
 Voorbeeld:
float float_getal;
double double_getal;
float_getal = 10;
double_getal = float_getal;
float_getal *= 12.123456789;
double_getal *= 12.123456789;
System.out.println("float : " + float_getal);
System.out.println("double : " + double_getal);
Uitvoer:
float : 121.234566
double : 121.23456789000001
85
Oefeningen
Hoofdstuk 4
86
Verbeter volgende stukjes code:
1. if ( age >= 65 );
System.out.println ( “Age greater than or equal to 65” );
else
System.out.println ( “Age is less than 65 )”;
2. int x = 1, total;
while ( x <= 10 )
{
total += x;
++x;
}
87
Verbeter volgende stukjes code:
3. while ( x <= 100 )
total += x;
++x;
4. while ( y > 0 ) {
System.out.println( y );
++y;
88
Welke output geeft volgende applicatie?
public class Mystery
{
public static void main ( String args[] )
{
int y, x = 1, total = 0;
while ( x <= 10 )
{
y = x * x;
System.out.println( y );
total += y;
++x;
}
System.out.println ( “Total is “ + total );
}
}
89
Welke output geeft volgende applicatie?
public class Mystery2
{
public static void main ( String args[] )
{
int count = 1;
while ( count <= 10 )
{
System.out.println(
count % 2 == 1 ? “****” : “++++++++” );
++count;
}
}
}
90
Schrijf een applicatie die…
1.
2.
via een lus volgende tabel met waarden afdrukt
N
10*N
100*N
1000*N
1
2
3
4
5
10
20
30
40
50
100
200
300
400
500
1000
2000
3000
4000
5000
drie gehele getallen, verschillend van 0, inleest, en bepaalt of deze de zijden
van een rechthoekige driehoek zouden kunnen voorstellen
91
Download