Selection (if/else)

IB Syllabus: B2.3.2 - Construct algorithms using selection: if, else if, else, nested if, and boolean conditions.

Table of Contents

  1. Key Concepts
    1. Relational Operators
    2. Boolean (Logical) Operators
  2. Worked Examples
    1. Example 1: Simple if-else - Pass or Fail
    2. Example 2: if-else if-else - Grade Boundaries
    3. Example 3: Nested if - Finding the Smallest
    4. Example 4: Boolean Operators - Range Check
    5. Example 5: Leap Year - Compound Logic
  3. Quick Code Check
  4. Trace Exercise
  5. Code Completion
  6. Spot the Bug
  7. Output Prediction
  8. Practice Exercises
    1. Core
    2. Extension
    3. Challenge
  9. GitHub Classroom
  10. Connections

Key Concepts

Selection allows a program to make a decision and follow different paths depending on whether a condition is true or false.

Structure When to use
if One action when a condition is true
if-else Two different paths - true or false
if-else if-else Multiple conditions checked in order
Nested if A decision inside another decision

Relational Operators

Operator Meaning Example
== Equal to score == 100
!= Not equal to input != 0
< Less than age < 18
> Greater than temp > 30
<= Less than or equal to marks <= 50
>= Greater than or equal to grade >= 90

Boolean (Logical) Operators

Operator Meaning Example
&& AND - both must be true age >= 13 && age <= 17
\|\| OR - at least one must be true score < 0 \|\| score > 100
! NOT - reverses the boolean !isValid

Use == to compare primitives (int, boolean, char). To compare Strings, always use .equals():

if (name.equals("Alice")) { ... }   // correct
if (name == "Alice") { ... }        // WRONG - compares memory addresses

Worked Examples

Example 1: Simple if-else - Pass or Fail

import java.util.Scanner;

Scanner input = new Scanner(System.in);
System.out.print("Enter your score: ");
int score = input.nextInt();

if (score >= 50) {
    System.out.println("Pass");
} else {
    System.out.println("Fail");
}

How it works:

  • If the score is 50 or above, "Pass" is printed.
  • Otherwise (score below 50), "Fail" is printed.
  • Only one branch ever runs - they are mutually exclusive.

Example 2: if-else if-else - Grade Boundaries

When there are multiple ranges to check, use an if-else if-else chain. Java evaluates conditions top to bottom and takes the first branch that is true.

import java.util.Scanner;

Scanner input = new Scanner(System.in);
System.out.print("Enter your test score: ");
int score = input.nextInt();

if (score >= 90) {
    System.out.println("Grade: 7");
} else if (score >= 80) {
    System.out.println("Grade: 6");
} else if (score >= 70) {
    System.out.println("Grade: 5");
} else if (score >= 60) {
    System.out.println("Grade: 4");
} else if (score >= 40) {
    System.out.println("Grade: 3");
} else {
    System.out.println("Below passing");
}

Because conditions are checked top-to-bottom, a score of 85 reaches score >= 90 first (false), then score >= 80 (true) - and takes that branch. The remaining conditions are never checked.


Example 3: Nested if - Finding the Smallest

An if inside another if creates a nested decision.

import java.util.Scanner;

Scanner input = new Scanner(System.in);
System.out.print("Enter three numbers: ");
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();

if (a < b) {
    if (a < c) {
        System.out.println(a + " is the smallest.");
    } else {
        System.out.println(c + " is the smallest.");
    }
} else {
    if (b < c) {
        System.out.println(b + " is the smallest.");
    } else {
        System.out.println(c + " is the smallest.");
    }
}

How it works:

  • First, compare a and b to narrow down to two candidates.
  • Then compare the survivor with c.
  • Each nested if makes a further decision within the branch.

Example 4: Boolean Operators - Range Check

Combine conditions with && (AND) and || (OR) for complex decisions.

import java.util.Scanner;

Scanner input = new Scanner(System.in);
System.out.print("Enter your age: ");
int age = input.nextInt();

if (age >= 13 && age <= 17) {
    System.out.println("You are a teenager.");
} else if (age >= 18) {
    System.out.println("You are an adult.");
} else {
    System.out.println("You are a child.");
}
// Validation: reject out-of-range scores
System.out.print("Enter score (0-100): ");
int score = input.nextInt();

if (score < 0 || score > 100) {
    System.out.println("Invalid score!");
} else {
    System.out.println("Score recorded: " + score);
}

Common mistake: Writing if (age >= 13 && <= 17) - Java requires a full condition on both sides of &&: age >= 13 && age <= 17.


Example 5: Leap Year - Compound Logic

A year is a leap year if it is divisible by 4, except centuries (divisible by 100) must also be divisible by 400.

import java.util.Scanner;

Scanner input = new Scanner(System.in);
System.out.print("Enter a year: ");
int year = input.nextInt();

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    System.out.println(year + " is a leap year.");
} else {
    System.out.println(year + " is not a leap year.");
}

Testing:

  • 2024 → 2024 % 4 == 0 and 2024 % 100 != 0leap year
  • 1900 → 1900 % 4 == 0 but 1900 % 100 == 0 and 1900 % 400 != 0not a leap year
  • 2000 → 2000 % 400 == 0leap year

Quick Code Check

Q1. What is printed when score = 85?

if (score >= 90) {
    System.out.println("Grade: A");
} else if (score >= 80) {
    System.out.println("Grade: B");
} else if (score >= 70) {
    System.out.println("Grade: C");
}

Q2. What is printed when x = 15?

if (x >= 10 && x <= 12) {
    System.out.println("In range");
} else {
    System.out.println("Out of range");
}

Q3. What is printed?

boolean isRaining = true;
if (!isRaining) {
    System.out.println("Go outside");
} else {
    System.out.println("Stay inside");
}

Q4. Which is the correct way to compare two Strings in Java?

Q5. What does age < 0 || age > 120 evaluate to when age = 150?


Trace Exercise

Trace this code - fill in the value of each variable and what is printed for the given input.

Input: score = 72, bonus = true

int score = 72;
boolean bonus = true;
String result;

if (score >= 80) {
    result = "Distinction";
} else if (score >= 60) {
    if (bonus) {
        result = "Merit (with bonus)";
    } else {
        result = "Merit";
    }
} else {
    result = "Pass";
}

System.out.println(result);
CheckConditionResult
1st if score >= 80 → 72 >= 80
1st else if score >= 60 → 72 >= 60
Nested if bonus

What is printed?


Code Completion

Complete the missing parts of this program that categorises a temperature into “Hot”, “Warm”, or “Cold” using an if-else if-else chain. This exercises your understanding of how boundary values determine which branch executes.

int temp = 35;
if (temp >= ) {
    System.out.println("Hot");
}  (temp >= 15) {
    System.out.println("Warm");
} else {
    System.out.println();
}

Complete the condition that checks if a number is between 1 and 100 (inclusive). This tests your ability to use the && (AND) operator to build a range check with two relational comparisons.

int num = 50;
if (num  && num ) {
    System.out.println("Valid");
} else {
    System.out.println("Invalid");
}

Spot the Bug

This code should print “Equal” when two integers are the same, but it uses the assignment operator (=) instead of the comparison operator (==). Click the buggy line, then choose the fix.

int a = 5;
int b = 5;
if (a = b) {
    System.out.println("Equal");
}

What is wrong and how do you fix it?


This code should print “Match” when the String variable holds "yes", but it incorrectly uses == to compare Strings. This is one of the most common Java mistakes – Strings must be compared with .equals(), not ==. Find the bug.

String answer = "yes";
if (answer == "yes") {
    System.out.println("Match");
} else {
    System.out.println("No match");
}

What is wrong and how do you fix it?


Output Prediction

What does this code print? This code tests your understanding of else-if chain evaluation order – remember that Java checks conditions top to bottom and executes only the first branch that is true. Type the exact output.

int x = 7;
if (x > 10) {
    System.out.println("Big");
} else if (x > 5) {
    System.out.println("Medium");
} else {
    System.out.println("Small");
}
Expected: Medium

What does this code print? This code demonstrates that statements after an if-else block always execute regardless of which branch was taken. Pay attention to both the conditional output and the unconditional output.

int a = 3;
int b = 5;
if (a > b) {
    System.out.println(a);
} else {
    System.out.println(b);
}
System.out.println("Done");
Expected: 5
Done

Practice Exercises

Core

  1. Odd or even - Write a program that reads an integer and prints whether it is odd or even.

  2. Largest of three - Read three integers from the user and print the largest using if-else if-else.

  3. Letter grade - Read a test score (0–100) and print the corresponding IB grade (7, 6, 5, 4, 3, 2, 1) using grade boundaries.

  4. Positive, negative, or zero - Read a number and print whether it is positive, negative, or zero.

Extension

  1. Ticket pricing - A cinema charges:
    • Under 5: free
    • 5–12: $8
    • 13–64: $15
    • 65+: $10

    Read the customer’s age and print the ticket price. Validate that age is non-negative.

  2. Quadrant finder - Read an (x, y) coordinate pair and print which quadrant the point is in (I, II, III, or IV), or if it lies on an axis.

  3. Day of the week - Read a number 1–7 and print the corresponding day name. Print “Invalid” for any other number.

Challenge

  1. Triangle classifier - Read three side lengths and determine if they form a valid triangle. If valid, classify it as equilateral, isosceles, or scalene.

  2. Leap year checker - Read a year from the user and determine if it is a leap year. A year is a leap year if divisible by 4, except centuries must also be divisible by 400. Print the result with an explanation.


GitHub Classroom

Selection Exercises
Practice if/else, nested conditions, and boolean logic.
Codespace Setup Instructions (click to expand)

First Time Setup

  1. Click “Open in GitHub” above, then click the green “Accept this assignment” button
  2. Check the email registered with your GitHub account – click the link there to open your repository. This avoids access issues and means your teacher does not need to share links manually
  3. Wait for your repository to be created, then click “Open in Codespace”
  4. Wait for the Codespace to finish loading (you’ll see VS Code in your browser)

Important: Switch to Standard Mode

  1. Look at the bottom status bar. If it says Java: Lightweight Mode, click on it and select Standard
  2. Wait for Java to finish loading (status bar will say Java: Ready)
  3. Without Standard Mode, the Run button won’t work and you’ll get “Main method not found” errors

Dismiss Popups

You’ll see two notification popups. Dismiss them both:

  • “Would you like VS Code to periodically run git fetch?” → Click No
  • “There’s a pull request associated with main” → Click Don’t Show Again

These are housekeeping popups, not part of the assignment.

How to Code

  1. Open src/Selection.java. This is the only file you need to edit
  2. Complete each // TODO section
  3. Click the Run button (▶ above main) to test your output
  4. Compare your output with the expected output written in the comments above each task

How to Check Your Code

You can check your work in two ways:

Option A: Run your code directly

  • Click the Run button (▶) above main in Selection.java
  • Compare your printed output with the expected output shown in the comments above each task

Option B: Run the autograder tests

  • Open the Terminal (Menu → Terminal → New Terminal)
  • Type bash run-tests.sh and press Enter
  • Green ✓ = test passed, Red ✗ = test failed
  • Each test tells you what it expected. Read the error message to fix your code

How to Submit

  1. Click the Source Control icon (branch icon) in the left sidebar
  2. Type a message like completed tasks in the message box
  3. Click the green Commit button
  4. If asked “stage all changes?” → click Always
  5. Click Sync Changes → if asked about push/pull → click OK, Don’t Show Again
  6. Done! Autograding runs automatically. Your teacher can see your results in the GitHub Classroom dashboard

How to Review Feedback

  1. Go to your repository on GitHub
  2. Click the “Pull requests” tab at the top
  3. Open the pull request called “Feedback”
  4. Click the “Files changed” tab. You’ll see your teacher’s comments on specific lines of your code
  5. Read through each comment carefully, then fix your code in Codespaces
  6. Run bash run-tests.sh in your Codespaces Terminal to check your fixes
  7. Commit and push again (repeat steps 12-17). The autograder will re-run automatically

Connections

Prerequisites:

Related Topics:

What’s Next:

  • Iteration - the next construct to learn
  • Loops use the same boolean conditions you learned here

Selection and iteration together give you the power to make any decision and repeat any action. Combined with sequence, these three constructs can express any algorithm.


© EduCS.me — A resource hub for Computer Science education

This site uses Just the Docs, a documentation theme for Jekyll.