Reprompting

If you ask someone a yes or no question and they respond with "huh?" you might want to ask them again.

This is a good use case for loops. You ask a question and, if the answer you get is acceptable, you proceed as normal. If it is not then you loop back and ask again.

void main() {
    while (true) {
        String response = IO.readln("Answer me: yes or no");
        if (response.equals("yes")) {
            IO.println("okay then!");
        }
        else if (response.equals("no")) {
            IO.println("also fine!");
        }
        else {
            IO.println("Not a valid response");
            // Will go back to the top of the loop
            continue;
        }

        // If a "continue" is not hit, exit the loop
        break;
    }
}

If the program would normally crash on unexpected input you can use try and catch to recover from this and reprompt the user.

This is applicable to Integer.parseInt, Double.parseDouble, and any other method that would throw an exception on unexpected inputs.

void main() {
    int number;
    while (true) {
        String response = IO.readln("What is your least favorite number? ");
        try {
            // Here Integer.parseInt might throw an exception,
            number = Integer.parseInt(response);
        } catch (RuntimeException e) {
            // If that happens, go up to the top and reprompt
            continue;
        }

        // If a "continue" is not hit, exit the loop
        break;
    }

    IO.println("Your least favorite number is " + number);
}