Programmeren in Java/Conditionele blokken

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

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[bewerken]

De eenvoudigste vorm van een conditionele blok is de if statement die een booleaanse uitdrukking bevat gevolgd door een codeblok die 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[bewerken]

Nu je een if hebt gebruikt om code uit te voeren als er aan een voorwaarde is voldaan wilt 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 inefficient, want nu hebben we twee booleaanse uitdrukkingen gebruikt die moet worden berekent 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[bewerken]

Zonder codeblokken[bewerken]

Het 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 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 verminderd de leesbaarheid en kan leiden tot fouten als je bijvoorbeeld een lijn wilt toevoegen die afhankelijk is aan de if maar vergeet de accolades toe te voegen om de codeblok aan te geven .

Switch[bewerken]

Dan is er ook nog de switch, een switch is een alternatief 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 maandag.");
        } else if (dayOfTheWeek == 3) {
            System.out.println("Het is maandag.");
        } else if (dayOfTheWeek == 4) {
            System.out.println("Het is maandag.");
        } else if (dayOfTheWeek == 5) {
            System.out.println("Het is maandag.");
        } 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 dus iedere keer dezelfde vergelijking doet, 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 x heeft als resultaat
            break;
        case z:
            // code om uit te voeren als expressie x 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.
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.