从控制台读取扫描仪循环

use*_*240 3 java console for-loop java.util.scanner

我有这个方法,并从控制台(键盘)读取一个int数字序列的想法,并在ArrayList中添加所有这些,我使用类Scanner读取数字,但在for循环不起作用,它抛出" java.util.NoSuchElementException".

public static int mayorNumberSecuence(){
        System.out.println("Give me a size ");
        Scanner sn = new Scanner(System.in);
        int n = sn.nextInt();
        sn.close();
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i=0; i<= n; ++i){
            System.out.println("Give me a number ");
            Scanner sn2 = new Scanner(System.in);
            int in = sn2.nextInt();
            list.add(in);
            sn2.close();
        }
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 5

你的问题在这里:

Scanner sn = new Scanner(System.in);
int n = sn.nextInt();
sn.close();
Run Code Online (Sandbox Code Playgroud)

您正在关闭当前Scanner关闭InputStream用于读取数据的当前值,这意味着您的应用程序将不再接受来自用户的任何输入.这就是为什么创建一个新的将无法Scanner读取的原因System.in.即使你创建另一种类型的阅读器使用System.in也行不通.

通常情况下,用打交道时System.in,你创建一个单一的阅读器(在这种情况下,Scanner),将所有的应用程序.所以,你的代码应该是这样的:

System.out.println("Give me a size ");
Scanner sn = new Scanner(System.in);
int n = sn.nextInt();
//sn.close();
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i < n; ++i){
    System.out.println("Give me a number ");
    //Scanner sn2 = new Scanner(System.in);
    int in = sn.nextInt();
    list.add(in);
    //sn2.close();
}
Run Code Online (Sandbox Code Playgroud)