AP CSA 4.6 Debugging: The Newline Scanner Left Behind

Unit 4: Data Collections · Lesson 4.6 · Debugging

The Newline Scanner Left Behind

Using Text Files. 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

nextInt reads the number and stops, leaving the newline sitting in the buffer. The very next nextLine finds that leftover newline, decides the line is over, and returns an empty String without waiting for anything. Every student meets this bug once and remembers it forever.

What is wrong with it

  1. After reading the count with nextInt, the first nextLine returns an empty String because the newline after the number was never consumed. Add a nextLine call that discards the rest of that line before reading the text lines.
  2. The loop reads one line too many, which throws NoSuchElementException on the last pass. It should read exactly count lines. Fix the bound.
  3. The line-length reporting is correct.

The program reads

A count on the first line, then that many lines of text.

The program should print

For each line, the line followed by its length. Then the total number of characters across all lines.

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
2
hello world
second line
Example 1 output
hello world
11
second line
11
22
Example 2 input
1
just one
Example 2 output
just one
8
8

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

nextInt consumes the digits and nothing else. The newline you pressed after typing the number is still waiting. nextLine reads up to the next newline, finds it immediately, and hands back the empty String between them.

Hint 2

The standard fix is one bare input.nextLine(); whose return value you deliberately throw away, placed right after the last nextInt. It exists purely to eat the leftover newline.

Hint 3

Mixing token reads and line reads is the whole trap. If a program only ever calls nextInt, or only ever calls nextLine, this bug cannot happen.

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]