Programmeren in Java/Conditionele blokken
Een belangrijk onderdeel van élk programmeertaal is het al dan niet uitvoeren van blokken code afhankelijk of er aan een bepaalde voorwaarde wordt voldaan. Je wilt bijvoorbeeld een stuk code uitvoeren enkel als een gebruiker van een programma meerderjarig is en misschien andere code als dat niet zo is. Door het gebruik van de statements if, else en if else kun je bepalen aan de hand van een booleaanse uitdrukking welke code wanneer moet worden uitgevoerd.
If
bewerkenDe eenvoudigste vorm van een conditionele blok is het if-statement dat een booleaanse uitdrukking bevat gevolgd door een codeblok dat moet worden uitgevoerd als de booleaanse expressie waar is.
if (<booleaanse uitdrukking>) {
// De code die moet worden uitgevoerd als de uitdrukking true heeft als resultaat.
}
Stel we willen een bericht op het scherm laten zien dat zegt dat de persoon meerderjarig is als die ouder is dan 18. Dan kunnen we bijvoorbeeld het volgende doen met if.
public class Main {
public static void main(String[] args) {
int age = 25;
if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
}
}
}
De leeftijd is 25 wat groter of gelijk is aan 18, dus krijg je als uitvoer:
De persoon is meerderjarig.
Als je de leeftijd zou veranderen naar bijvoorbeeld 14 dan krijg je niets te zien op het scherm.
Else
bewerkenNu je een if hebt gebruikt om code uit te voeren als er aan een voorwaarde is voldaan, wil je misschien ook code uitvoeren als het tegenovergestelde waar is.
public class Main {
public static void main(String[] args) {
int age = 25;
if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
}
if (age < 18) {
System.out.println("De persoon is minderjarig.");
}
}
}
Dit zal dus zeggen dat een persoon meerderjarig is als die ouder is dan 18 of minderjarig als die jonger is dan 18. Dit is echter inefficiënt, want nu hebben we twee booleaanse uitdrukkingen gebruikt die moet worden berekend door Java op twee aparte if statements terwijl we al bij de eerste if statement wisten dat een persoon meerderjarig was of niet.
Hier komt de else van pas en ziet er als volgt uit.
if (<booleaanse uitdrukking>) {
// De code die moet worden uitgevoerd als de uitdrukking true heeft als resultaat.
} else {
// De code die moet worden uitgevoerd als de uitdrukking van de if false heeft als resultaat.
}
We kunnen dan ons vorig voorbeeld als volgt herwerken.
public class Main {
public static void main(String[] args) {
int age = 25;
if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
} else {
System.out.println("De persoon is minderjarig.");
}
}
}
Je kunt dan ook met die if en else een klein programma maken dat kijkt of een getal even of oneven is.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// De volgende drie lijntjes code dient om een getal in te lezen.
Scanner scanner = new Scanner(System.in);
System.out.println("Geef een getal:");
int number = scanner.nextInt();
if (number % 2 == 0) {
System.out.println("Het getal is even");
} else {
System.out.println("Het getal is oneven");
}
}
}
Else if
bewerkenEn dan is er ook nog de else if. De else if is een soort van if statement die je net zoals de else kunt laten uitvoeren als de booleaanse uitdrukking van je if false geeft als resultaat. Het verschil met else is dat je bij een else if ook een booleaanse uitdrukking moet meegeven.
if (<booleaanse uitdrukking>) {
// De code die moet worden uitgevoerd als de uitdrukking true heeft als resultaat.
} else if (<booleaanse uitdrukking>) {
// De code die moet worden uitgevoerd als de uitdrukking true heeft als resultaat en de uitdrukking van de vorige if ''false'' heeft als resultaat
} else {
// De code die moet worden uitgevoerd als de uitdrukking van de if false heeft als resultaat.
}
We kunnen daardoor het vorige voorbeeld waarbij we op het scherm tonen of een persoon meerderjarig of minderjarig is uitbreiden met op het scherm te tonen of een persoon een vijftigplusser is.
public class Main {
public static void main(String[] args) {
int age = 65;
if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
} else if (age >= 50) {
System.out.println("De persoon is een vijftigplusser.");
} else {
System.out.println("De persoon is minderjarig.");
}
}
}
Dit geeft echter als resultaat:
De persoon is meerderjarig.
We hadden nochtans de variabele age 65 als waarde gegeven, dus verwachten we dat op het scherm "De persoon is een vijftigplusser." wordt getoond. Het resultaat is echter correct. Net zoals else wordt de else if enkel uitgevoerd als de booleaanse uitdrukking van de eerste if false geeft als resultaat. Want 65 is effectief groter of gelijk aan 18. Je moet dus de "strengste" (of sterkste) booleaanse uitdrukking altijd bovenaan plaatsen.
public class Main {
public static void main(String[] args) {
int age = 65;
if (age >= 50) {
System.out.println("De persoon is een vijftigplusser.");
} else if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
} else {
System.out.println("De persoon is minderjarig.");
}
}
}
Met dus als resultaat.
De persoon is een vijftigplusser.
Als je nu 25 zou geven als waarde aan age, krijg je "De persoon is meerderjarig." te zien. Geef je een waarde onder 18, wordt de else-clausule uitgevoerd en krijg je "De persoon is minderjarig." te zien.
Je kun zoveel else if gebruiken als je wilt, je zou dit ook nog kunnen uitbreiden met zestigplusser. Onthoud wel dat de strengste booleaanse uitdrukking bovenaan moet staan.
public class Main {
public static void main(String[] args) {
int age = 65;
if (age >= 60) {
System.out.println("De persoon is een zestigplusser.");
} else if (age >= 50) {
System.out.println("De persoon is een vijftigplusser.");
} else if (age >= 18) {
System.out.println("De persoon is meerderjarig.");
} else {
System.out.println("De persoon is minderjarig.");
}
}
}
Zonder codeblokken
bewerkenHet is ook mogelijk om de if, else, else if te gebruiken zonder codeblokken(dus geen accolades {}), bijvoorbeeld zoals volgt:
public class Main {
public static void main(String[] args) {
int age = 25;
if (age >= 18)
System.out.println("De persoon is meerderjarig.");
}
}
Als je geen codeblok (met accolades) gebruikt, wordt enkel de regel die rechtstreeks na de if al dan niet uitgevoerd afhankelijk of booleaanse uitdrukking waar is of niet. Als je een regel toevoegt
public class Main {
public static void main(String[] args) {
int age = 25;
if (age >= 18)
System.out.println("De persoon is meerderjarig.");
System.out.println("Deze lijn wordt uitgevoerd ongeacht of de uitdrukking waar is of niet.");
}
}
Dit geeft als resultaat:
De persoon is meerderjarig. Deze lijn wordt uitgevoerd ongeacht of de uitdrukking waar is of niet.
Als je age naar bijvoorbeeld 12 zou veranderen, krijg je als resultaat:
Deze lijn wordt uitgevoerd ongeacht of de uitdrukking waar is of niet.
Het is echter af te raden om dit effectief zo te doen, het vermindert de leesbaarheid en kan leiden tot fouten als je bijvoorbeeld een regel wilt toevoegen die afhankelijk is aan de if, maar vergeet de accolades toe te voegen om het codeblok aan te geven.
Switch
bewerkenDan is er ook nog de switch, een switch kan een alternatief zijn voor als je een reeks else if-en gebruikt om bijvoorbeeld dezelfde variabele te vergelijken met een bepaalde waarde. Bijvoorbeeld je heb een variabele die de dag van de week bevat en afhankelijk van de waarde wil je maandag, dinsdag, woensdag, etc... tonen op het scherm.
public class Main {
public static void main(String[] args) {
int dayOfTheWeek = 4;
if (dayOfTheWeek == 1) {
System.out.println("Het is maandag.");
} else if (dayOfTheWeek == 2) {
System.out.println("Het is dinsdag.");
} else if (dayOfTheWeek == 3) {
System.out.println("Het is woensdag.");
} else if (dayOfTheWeek == 4) {
System.out.println("Het is donderdag.");
} else if (dayOfTheWeek == 5) {
System.out.println("Het is vrijdag.");
} else if (dayOfTheWeek == 6) {
System.out.println("Het is zaterdag.");
} else if (dayOfTheWeek == 7) {
System.out.println("Het is zondag.");
} else {
System.out.println("Verkeerde dag van de week opgegeven.");
}
}
}
Het probleem hiermee is dat je iedere keer dezelfde variabele gebruikt. Een switch kan dan goed alternatief zijn en ziet er als volgt uit.
switch (<expressie>) {
case x:
// code om uit te voeren als expressie x heeft als resultaat
break;
case y:
// code om uit te voeren als expressie y heeft als resultaat
break;
case z:
// code om uit te voeren als expressie z heeft als resultaat
break;
//enzoverder..
default:
// code om uit te voeren als geen enkele case overeenkomt met het resultaat.
}
public class Main {
public static void main(String[] args) {
int dayOfTheWeek = 4;
switch (dayOfTheWeek) {
case 1:
System.out.println("Het is maandag.");
break;
case 2:
System.out.println("Het is dinsdag.");
break;
case 3:
System.out.println("Het is woensdag.");
break;
case 4:
System.out.println("Het is donderdag.");
break;
case 5:
System.out.println("Het is vrijdag.");
break;
case 6:
System.out.println("Het is zaterdag.");
break;
case 7:
System.out.println("Het is zondag.");
break;
}
}
}
Dit voorbeeld zal volgend resultaat geven:
Het is donderdag.
De expressie die je bij een switch invult moet een scalair zijn, een String, of een enum.
break
bewerkenZoals je in vorig voorbeeld kunt zien, wordt er gebruik gemaakt van het sleutelwoord break. In tegenstelling tot if wordt standaard niet alleen de code uitgevoerd die bij de case hoort, maar ook al de code die er achter komt. Volgend voorbeeld maakt dit duidelijk.
public class Main {
public static void main(String[] args) {
int number = 3;
switch (number) {
case 5:
System.out.println(5);
case 4:
System.out.println(4);
case 3:
System.out.println(3);
case 2:
System.out.println(2);
case 1:
System.out.println(1);
}
}
}
Geeft als resultaat:
3 2 1
Dit zorgt er dus voor dat sinds number de waarde drie heeft de case met waarde drie wordt uitgevoerd en alle cases daarachter. break zorgt er dan voor dat je programma uit de switch gaat. Je bent niet verplicht om break te gebruiken of als je het gebruikt bij iedere case te gebruiken. De cases zijn in feite punten waarnaar gesprongen kan worden.
default
bewerkenDefault is een soort van case maar dan zonder waarde. De code na de default wordt uitgevoerd als de waarde die meegegeven wordt aan de switch niet voorkomt tussen de cases. Neem nu het vorige voorbeeld van het tonen van de dagen aan de hand van een int. Er zijn maar zeven dagen in de week, dus als je een getal geeft die niet tussen één en zeven, zou je een soort foutmelding moeten krijgen. Dit kun je dan doen met default.
public class Main {
public static void main(String[] args) {
int dayOfTheWeek = 1000;
switch (dayOfTheWeek) {
case 1:
System.out.println("Het is maandag.");
break;
case 2:
System.out.println("Het is dinsdag.");
break;
case 3:
System.out.println("Het is woensdag.");
break;
case 4:
System.out.println("Het is donderdag.");
break;
case 5:
System.out.println("Het is vrijdag.");
break;
case 6:
System.out.println("Het is zaterdag.");
break;
case 7:
System.out.println("Het is zondag.");
break;
default:
System.out.println("U hebt een ongeldige dag ingegeven.");
break;
}
}
}
Dit geeft dus als resultaat:
U hebt een ongeldige dag ingegeven.
In dit voorbeeld hebben we default op het einde van de switch geplaatst, maar je kunt die ook vooraan of tussen de cases plaatsen. Het is echter gangbaar om het op het einde te zetten.