Att välja: if

Ibland vill man åka till skolan med tåg eller buss. Ibland vill man se en film på bio och man väljer en film bland flera. Man vill också välja platsen man ska sitta. Alla dessa beslut och många andra är beroende av att ett visst villkor är uppfyllt. I likhet med det verkliga livet kan vi använda villkorssatser i programmering.
Villkorssatser baseras på kontrollflödessatser eller logiska jämförelser:

  • mindre än (Less than): a < b
  • mindre än eller lika med (Less than or equal to): a <= b
  • större än (Greater than): a > b
  • större än eller lika med (Greater than or equal to): a >= b
  • lika med (Equal to): a == b
  • inte lika med (Not Equal to): a != b

Till exempel, om ett tal är större än noll vill vi skriva ut ”Positivt nummer” men om det är mindre än noll vill vi skriva ut ”Negativt tal”. I det här fallet har vi två print-satser i programmet, men bara en print-sats körs åt gången baserat på inmatningsvärdet.

Följande villkorssatser finns:

  1. if-sats
  2. Nästlade if-satser
  3. if-else sats
  4. if-else-if sats

if-satsen har följande syntax:

if (villkor) {
sats att exekvera om villkoret är uppfyllt
}

Exempel:

Om variabel a är större än noll skriv ut ”Positivt nummer”

if (a > 0) {
System.out.println(”Positivt nummer”);
}

Man vill också skriva ut ”Negativt nummer” om a är mindre än noll. Här går det bra att använda if-else sats.

if (a > 0) {
System.out.println(”Positivt nummer”);
} else {
System.out.println(”Negativt nummer”);
}

Nästlade if-satser

När det finns en if-sats inuti en annan if-sats kallas den nästlade if-satser.
Strukturen för nästlade if-satser ser ut så här (syntax):

if (villkor 1) {

sats 1 att exekvera om villkoret är uppfyllt

if (villkor 2) {

sats 2 att exekvera om villkoret är uppfyllt

}

}

Sats 1 skulle exekveras om villkoret 1 är sant. Sats 2 skulle exekveras om båda villkoren (villkor 1 och villkor 2) är sanna.

Exempel:

public class IfSatser1 {
    public static void main(String[] args) {
        int num = 65;
        if(num < 100) {
            System.out.println(num + " är mindre än 100");
            if(num > 50) {
                System.out.println(num + " är större än 50");
            }
        }
    }
}

I exemplet ovan är 65 mindre än 100 och större än 50 därför returnerar koden följande:

65 är mindre än 100
65 är större än 50

Om variabeln num tilldelas 35 är villkor 1 sant men inte villkor 2, därför returnerar koden enbart: 35 är mindre än 100.

Det är här som en intern else skulle kunna användas:

public class IfSatser2 {

    public static void main(String[] args) {
        int num = 35;
        if(num < 100) {
            System.out.println(num + " är mindre än 100");
            if(num > 50) {
                System.out.println(num + " är större än 50");
            }
            else {
                System.out.println(num + " är inte större än 50");
            }
        }
    }
}

Observera att den inre else är ihop med den närmaste if-satsen. Koden returnerar:

35 är mindre än 100
35 är inte större än 50

Om koden ändras enligt följande:

public class IfSatser3 {

    public static void main(String[] args) {
        int num = 115;
        if(num < 100) {
            System.out.println(num + " är mindre än 100");
        } 
        else {
            System.out.println(num + " är inte större än 100");
            if(num > 50) {
                    System.out.println(num + " är större än 50");
            }
        }
    }
}

Nu else-sats är närmare till den yttre if-sats och därför returnerar koden:

115 är inte större än 100
115 är större än 50

Ett nytt exempel som behandlar flera val illustrerar en if-else-if sats:

public class IfSatser3 {
    public static void main(String[] args) {
        int num = 555;
        if(num < 10 && num >= 1) {
            System.out.println(num + " är ett ensiffrigt nummer.");
        }
        else if(num < 100 && num >= 10) {
            System.out.println(num + " är ett två siffrigt nummer.");
        }
        else if(num < 1000 && num >= 100) {
            System.out.println(num + " är ett tresiffrigt nummer.");
        }
        else if(num <10000 && num >= 1000) {
            System.out.println(num + " är ett fyrssifrigt nummer.");
        }
        else {
            System.out.println(num + " är inte mellan 1 och 9999");
        }
    }
}

Koden returnerar: 555 är ett tresiffrigt nummer