Scanner NoSuchElementException when calling .next() method

后端 未结 3 932
余生分开走
余生分开走 2021-01-16 18:50

In Java, I\'m getting this Exception:

Exception in thread \"main\" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at          


        
相关标签:
3条回答
  • 2021-01-16 19:21

    You are calling .next() twice on every iteration of the loop, so when you are near the end, you jump off the end of the list and the compilter tells you there is nothing there.

    Instead of this:

    for(int counter = 0 ; counter < file.next().length(); counter ++) {
        System.out.println(`file.next()`.charAt(counter));    
    }
    

    Do this instead:

    String temp = file.next();
    for(int counter = 0 ; counter < next.length(); counter ++) {
        System.out.println(temp .charAt(counter));    
    }  
    

    SEE HERE

    0 讨论(0)
  • 2021-01-16 19:25

    The Scanner.next() method will move the internal iterator along one. Your code should be:

    public static void readFile(String path) {
        Scanner file = null;
        try {
            file = new Scanner(new File (path));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            while (file.hasNext()) {
                String next = file.next();
                for(int counter = 0 ; counter < next.length(); counter ++) {
                    System.out.println(next.charAt(counter));    
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-16 19:38

    Don't call next() so much times! It actually go to the next element when you call it. If you need to use it more than once, put it inside a variable and use it.

            String next = file.next();
            for(int counter = 0 ; counter < next.length(); counter ++) {
                System.out.println(next.charAt(counter));    
            }
    
    0 讨论(0)
提交回复
热议问题