algorithmicCoder
algorithmicCoder

Reputation: 6799

Why does this code trigger an infinite loop?

I am writing some simple code to parse a file and return the number of lines but the little red box in eclipse won't go off so I assume I am triggering an infinite loop. Th Text file i am reading has only 10 lines...here's the code: What am I doing wrong?

import java.io.*;
import java.util.Scanner;
public class TestParse {    
    private int noLines = 0;    
    public static void main (String[]args) throws IOException {
        Scanner defaultFR = new Scanner (new FileReader ("C:\\workspace\\Recommender\\src\\IMDBTop10.txt"));
        TestParse demo = new TestParse();
        demo.nLines (defaultFR);
        int x = demo.getNoLines ();
        System.out.println (x);
    }   
    public TestParse() throws IOException
    {
        noLines = 0;
    }
    public void nLines (Scanner s) {
        try {
            while (s.hasNextLine ())
                noLines++;
        }
        finally {
                if (s!=null) s.close ();
        }
    }
    public int getNoLines () {
        return noLines;
    }           
}

Upvotes: 0

Views: 366

Answers (2)

Howard
Howard

Reputation: 39217

You only check hasNextLine within your loop. This checks if another line is present but does not read it. Let it follow by nextLine and your code will work.

while(s.hasNextLine()){
    s.nextLine();
    noLines++;
}

Upvotes: 1

typo.pl
typo.pl

Reputation: 8942

You're not calling s.nextLine() in the while-loop:

should be:

        while(s.hasNextLine()){
           s.nextLine(); // <<<
            noLines++;

          }

Upvotes: 6

Related Questions