AP CSA 2.5 Debugging: The Guard That Does Not Guard

Unit 2: Selection and Iteration · Lesson 2.5 · Debugging

The Guard That Does Not Guard

Compound Boolean Expressions. This is not a blank editor: it is someone else's attempt. Find what is wrong, fix it, and submit to be graded against hidden test cases.

Why debugging is its own skill

The single ampersand and the double ampersand both compute the same answer for booleans. Only one of them protects the code on its right from ever running. When the thing on the right would divide by zero, that difference is a crash.

What is wrong with it

  1. Run the program with a count of 0. It crashes with an ArithmeticException on a division by zero, even though the condition clearly checks that count is not zero first. The check uses a single ampersand, which evaluates BOTH sides before deciding. Change it to the operator that stops as soon as the left side is false.
  2. The in-range test is supposed to accept values from 10 through 99 inclusive. It uses an or, which accepts everything. Fix it so it means what it says.
  3. The reading of the inputs and the total are correct.

The program reads

An integer count, then that many integers, then one more integer to range check.

The program should print

Two lines: true if the count is not zero and the average is over 10, then true if the last value is between 10 and 99 inclusive.

Worked examples

These show what the FIXED program should print. There are more cases you cannot see, and they use different values, so patching around just these numbers will fail.

Example 1 input
0 5
Example 1 output
false
false
Example 2 input
3 20 30 40 50
Example 2 output
true
true

Your answer

Main.java

Input for the Run button

Run sends whatever is in the code box below, bugs and all, so you can see the crash or the wrong answer for yourself before you fix anything.


  

  

Stuck?

Hint 1

A single ampersand on two booleans is a real operator and it compiles fine. It just always evaluates the right side, so the division happens before the count check has any chance to protect it. The double ampersand short circuits: if the left side is false, the right side is never evaluated at all.

Hint 2

This is the reason the null check and the length check are written in that order everywhere you will ever see them. The order only saves you if the operator honors it.

Hint 3

For the range test, ask what check >= 10 || check <= 99 says about the value 5. It is not at least 10, but it is at most 99, so the or is satisfied. Every integer satisfies one side or the other.

Where to go next

Get in Touch

Whether you're a student, parent, or teacher — I'd love to hear from you.

Just want free AP CS resources?

Enter your email below and check the subscribe box — no message needed. Students get daily practice questions and study tips. Teachers get curriculum resources and teaching strategies.

Typically responds within 24 hours

Message Sent!

Thanks for reaching out. I'll get back to you within 24 hours.

🏫 Welcome, fellow educator!

I offer curriculum resources, practice materials, and study guides designed for AP CS teachers. Let me know what you're looking for — whether it's classroom materials, a guest speaker, or Teachers Pay Teachers resources.

Email

[email protected]

📚

Courses

AP CSA, CSP, & Cybersecurity

Response Time

Within 24 hours

Prefer email? Reach me directly at [email protected]