AP CSA 4.8 Debugging: Removing While You Walk

Unit 4: Data Collections · Lesson 4.8 · Debugging

Removing While You Walk

ArrayList Methods. 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

Removing an element slides everything after it down by one, but the loop index still moves up by one, so the element that took the removed one's place is stepped straight over. Two matching values in a row is all it takes to expose this, and the list never complains.

What is wrong with it

  1. The removal loop skips an element every time it removes one, because the index advances past the value that shifted down into that slot. Fix it so consecutive matching values are all removed. Walking the list backward is one clean way.
  2. The size is captured into a variable before the loop and then used as the bound, so it no longer matches the shrinking list and the loop reads past the end. Use the live size, or restructure so it cannot go stale.
  3. The printing loop at the end is correct.

The program reads

A count, then that many integers, then the value to remove.

The program should print

The remaining values one per line, then the size of the list.

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
3
4 4 7
4
Example 1 output
7
1
Example 2 input
5
1 2 3 4 5
3
Example 2 output
1
2
4
5
4

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

Trace the list 4, 4, 7 while removing 4. At i = 0 the first 4 is removed and the list becomes 4, 7. Then i becomes 1, which is the 7. The second 4 slid into index 0 and was never examined.

Hint 2

Going backward fixes it because removing at index i only shifts elements AFTER i, and a backward loop has already visited all of those. Nothing you still need to see ever moves.

Hint 3

A size captured before the loop is a snapshot of a list that is about to change. Either read list.size() fresh every time, or iterate backward so a shrinking size cannot outrun the index.

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]