如何使用Scanner类中的hasNext()?

Har*_*eja 5 java java.util.scanner

输入格式

读取一些未知的n行输入,stdin(System.in)直到你达到EOF; 每行输入都包含一个非空字符串.

输出格式

对于每一行,打印行号,后跟一个空格,然后输入作为输入的行内容:

样本输出

Hello world
I am a file
Read me until end-of-file.  
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案.问题是我无法继续进行EOF.但输出只是:

Hello world
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public class Solution {

    public static void main(String[] args) {
        check(1);  // call check method
    }

    static void check(int count) {          
        Scanner s = new Scanner(System.in);
        if(s.hasNext() == true) {
            String ns = s.nextLine();
            System.out.println(count + " " + ns);
            count++;
            check(count);
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*zel 6

您的代码不起作用,因为您Scanner在每次递归调用中都创建了一个新对象.不管怎么说,你不应该使用递归,而是迭代地进行.

迭代版

public class Solution {

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        int count = 1;

        while(s.hasNext()) {
            String ns = s.nextLine();
            System.out.println(count + " " + ns);
            count++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

递归版

public class Solution {

    private Scanner s;

    public static void main(String[] args) {

        s = new Scanner(System.in); // initialize only once
        check(1);
    }

    public static void check(int count) {
        if(s.hasNext()) {
            String ns = s.nextLine();
            System.out.println(count + " " + ns);
            check(count + 1);
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)