Hoofdstuk 5: Selecties
Doel van dit Hoofdstuk
- het type
booleandeclareren voor variabelen en Booleaanse uitdrukkingen maken en evalueren - Implementeren van
if-uitdrukkingen - Implementeren van
if-else-uitdrukkingen - Implementeren van geneste
if-uitdrukkingen - Genereren van willekeurige getallen met
Math.random() - Combineren van logische uitdrukkingen (
!,||,&&en^) - Gebruik van meerdere gevallen met
switch-uitdrukkingen
Inleiding
- In het vorige hoofdstuk hebben een programma gezien dat ons toeliet de straal van de cirkel in te voeren en waarbij de computer de oppervlakte berekende van die cirkel. Maar wat als we een negatief getal invoeren? Hoe kunnen we omgaan met die situatie.
We diennen dus een selectie uitdrukking te hebben waarbij we uitvoering van het programma willen laten afhangen van bepaalde waarden in een variabele.
In Java kan dit als volgt:
Het datatype boolean
Het datatype
booleandeclareert een variabele die twee waarden kan aannemen:trueoffalse
- Om waardes met elkaar te vergelijken biedt Java 6 relationele operatoren.
| Java Operator | Wiskundige operator | Name | Voorbeeld (veronderstel straal = 5) | Resultaat |
|---|---|---|---|---|
< |
kleiner dan | straal < 0 |
false |
|
<= |
kleiner of gelijk aan | straal <= 0 |
false |
|
> |
groter dan | straal > 0 |
true |
|
>= |
groter of gelijk dan | straal >= 0 |
true |
|
== |
gelijk aan | straal == 0 |
false |
|
!= |
niet gelijk dan | straal != 0 |
true |
Het resultaat van een vergelijking is
trueoffalse. Een dergelijke waarde noemt men ook een Booleaanse waarde. Een variabele dat een Booleaanse waarde bevat is ook een Booleaanse variabele en wordt in Java gedeclareerd door het datatypeboolean.In Java kunnen we een variabele van het type
booleanals volgt declareren en initiëren:boolean lichtenAan = true;
if-uitdrukkingen
een
if-uitdrukking is een constructie dat een programma toelaat om alternatieve uitvoeringen te volgen
- Java ondersteunt verschillende types van selectie-uitdrukkingen: een-weg
if-uitdrukkingen, twee-wegif-else-uitdrukkingen, genesteif-uitdrukkingen, meervoudigeif-else-uitdrukkingen,switch-uitdrukkingen en conditionele uitdrukkingen.

- Een een-weg
if-uitdrukking als blok uitvoeren enkel en alleen de voorwaarde bij deifwaar is:
- Als de Booleaanse uitdrukking evalueert tot
true(waar), dan wordt het blok met uitdrukkingen uitgevoerd, anders niet. - De Booleanse uitdrukkinge
booleaanse-uitdrukkingmet tussen haakjes staan.
Verkeerd
Goed
- In het onderstaande voorbeeld moet de gebruiker een getal ingeven. Als het getal een veelvoud is van
5dan toont hetHiFive. Als het getal een veelvoud is van2dan toont hetHiEven.
if-else-uitdrukkingen
Een
if-else-uitdrukking beslist zal de uitvoering aanpassen indien de conditie waar of niet waar is.
- Een
if-else-structuur laat je toe om alternatieve instructies uit te voeren wanneer de conditieniet waaris. - De syntax voor een
if-else-structuur is:
Een flowchart voor dergelijke uitdrukkingen is als volgt:

Als
booleeanse-uitdrukkingde waardetruegeeft, dan worden de uitdrukkingen voor de gevaltrueuitgevoerd, ander worden de uitdrukkingen voor het gevalfalseuitgevoerd.Bijvoorbeeld:
Geneste if en if-else structuren
Een
if-uitdrukking kan binnen een andereif-structuur gebruikt worden
- Een uitdrukking in een
ifofif-else-structuur kan elke Java-structuur zijn, ook een andereifofif-elsestructuur. - De binnense
if-structuur is zogezegde genest in een de buitensteif-structuur. In die binnensteif-structuur kan een andereif-structuur zitten. Er is geen grens in hoe diep de genesteif-structuren kunnen gaan. - Voorbeeld:
- Op deze manier kunnen we het volgende uitvoeren als we graden willen toekennen aan het eindresultaat van een examen.
- De bovenstaande code is wat onleesbaar vanwege de vele alternatieven. Een betere manier is de formattering wat aan te passen zodat het wat leesbaarder wordt:
Generatie van willekeurige getallen
Je kan
Math.random()om een willekeurig reëel getal (typedouble) te krijgen tussen0.0en1.0,1.0niet inbegrepen
- De klasse
Mathbevat veel methodes waarbij wiskundige functies kunnen uitgevoerd worden die we later zullen zien, maar één van die methodes het het genereren van een willekeurig getaldzodat . - Dus,
(int)(Math.random() * 10)zal een geheel getal geven tussen0en9.
Logische opoeratoren
De logische operatoren
!,&&,||en^kunnen gebruikt worden om samengestelde Booleaanse uitdrukkingen te maken.
- Soms, is het nodig dat een conditie in een
ifofif-elsestructuur bestaat uit meerdere Booleaanse uitdrukkingen. - Bijvoorbeeld, als we iets willen uitvoeren wanneer een getal deelbaar is door 2 en deelbaar is door 3 wordt dit:
- Er zijn 4 logische operatoren in Java:
| Operator | Naam | Beschrijving | ||
|---|---|---|---|---|
! |
niet | Logische negatie | ||
&& |
en | Logische conjunctie | ||
| ` | ` | of | Logische disjunctie | |
^ |
exclusieve of | Logische exclusie |
- De uitkomst van de logische operatoren wordt typisch in waarheidstabellen uitgezet.
- Dit is de waarheidstabel voor de
niet-operator (!).
p |
!p |
Voorbeeld ( leeftijd = 24 en gewicht = 140) |
|---|---|---|
true |
false |
!(leeftijd > 18) is false, want (leeftijd > 18) is true |
false |
true |
!(gewicht == 150) is true, want (gewicht == 150) is false |
- De waarheidstabel voor de
en-operator (&&).
p1 |
p2 |
p1 && p2 |
Voorbeeld ( leeftijd = 24 en gewicht = 140) |
|---|---|---|---|
false |
false |
false |
|
false |
true |
false |
(leeftijd > 28) && (gewicht <= 140) is false, want leeftijd > 28 is false |
true |
false |
false |
|
true |
true |
true |
(leeftijd > 18) && (gewicht >= 140) is true, want leeftijd > 18 en gewicht >= 140 zijn beide true |
- De waarheidstabel voor de
of-operator (||).
p1 |
p2 |
p1||p2 |
Voorbeeld ( leeftijd = 24 en gewicht = 140) |
|---|---|---|---|
false |
false |
false |
(leeftijd > 34)||(gewicht >= 150) is false, want leeftijd > 34 en gewicht >= 150 zijn beide false |
false |
true |
true |
|
true |
false |
true |
(leeftijd > 18)||(gewicht < 140) is true, want leeftijd > 18 is true |
true |
true |
true |
- De waarheidstabel voor de
exclusieve of-operator (^).
p1 |
p2 |
p1 ^ p2 |
Voorbeeld ( leeftijd = 24 en gewicht = 140) |
|---|---|---|---|
false |
false |
false |
(leeftijd > 34) ^ (gewicht > 140) is false, want leeftijd > 34 en gewicht > 140 zijn beide false |
false |
true |
true |
(leeftijd > 34) ^ (gewicht >= 140) is true, want leeftijd > 34 is false, maar gewicht >= 140 zijn beide true |
true |
false |
true |
|
true |
true |
false |
- Onderstaande programma toont een voorbeeld van alle logische operatoren.
- Opgelet In wiskund is het mogelijk om het volgende te zeggen
28 <= aantalDagenInEenMaand <= 31. In Java is dit fout, want van links naar rechts voeren we eerst28 <= aantalDagenInEenMaandwordt geëvalueerd tot eenbooleanwaarde, die niet kan vergeleken worden met31. In Java moet men dus zeggen:
28 <= aantalDagenInEenMaand && aantalDagenInEenMaand <= 31
- In Logische operatoren worden heel veel gebruikt in logica om programma's te verifiëren en mogelijks om programma's te schrijven die zelf code schrijven. Augustus De Morgan (1806 - 1871) was een Britse wiskundige die de wetten van De Morgan afleide namelijk:
!(conditie1 && conditie2)is equivalent met!conditie1 || !conditie2!(conditie1 || conditie2)is equivalent met!conditie1 && !conditie2
- Bijvoorbeeld
!(getal % 2 == 0 && getal % 3 == 0)
is equivalent met
getal % 2 != 0 || getal % 3 != 0
switch-uitdrukkingen
Een
switch-uitdrukkingen voert instructies uit op basis van de waarde van een variabele of een uitdrukking
Bij geneste
if-structuren kunnen we verschillende instructies laten uitvoeren op basis van andere condities, maar dit kan soms onleesbaar overkomen. Hierbij is het beter eenswitch-structuur te gebruiken zodat verschillende gevallen kunnen gedefinieerd worden en uitgevoerd worden op basis van de waarde van een variabele of uitdrukking.De syntax van een
switch-uitdrukking is
- De
switch-structuur gehoorzaamt aan volgende regels:- De
switch-uitdrukkingmet een waarde teruggeve van het typechar,byte,short,intofStringen moet altijd tussen haakjes staan. - De
waarde1,waarde2,... enwaardeNmoeten waardes zijn van hetzelfde type als de teruggegeven waarden van deswitch-uitdrukking. Ze moeten constante uitdrukkingen zijn en er mogen geen variabelen in zitten (bv.1 + xmag niet). - Wanneer er een
caseuitdrukking de zelfde waarde heeft als deswitch-uitdrukkingdan worden het blok met Java-uitdrukkingen uitgevoerd startend vanaf diecasetot eenbreak-statement of het einde van deswitch-structuur wordt tegengekomen. - Het geval
defaultis optioneel en wordt uitgevoerd als er geen enkel geval opgenomen is in decase-uitdrukkingen. - Het sleutelwoord
breakis optioneel. Bij het uitvoeren van debreak-uitdrukking zal de uitvoering deswitch-structuur onmiddelijk verlaten.
- De
Conditionele operatoren
Een conditionele operator evalueert een uitdrukking gebaseerd op een conditie
- Soms wil je een waarde toekennen aan een variabele
yonder een bepaalde voorwaarden. Het volgend stukje code zal de waarde1toekennen als een andere variabelexgroter is dan0en-1alsx
- Dergelijke code komt in een programma veel voor en kan korter geschreven woorden door een conditionele uitdrukking als volgt:
- De symbolen
?en:worden gezamelijk een conditionele operator genoemd. Dit wordt ook wel de ternaire operator genoemd om dat hij 3 operandi nodig geeft. In Java is dit ook de enige ternaire operator. De syntax is als volgt:
booleaanse-uitdrukking ? uitdrukking1 : uitdrukking2
uitdrukking1wordt uitgevoerd alsbooleaanse-uitdrukkingwaar is, in het andere geval wordtuitdrukking2uitgevoerd.