[英]reading from console with scanner in a loop for
我有此方法,并且从控制台(键盘)读取了一个整数序列并将其全部添加到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();
}
您的问题在这里:
Scanner sn = new Scanner(System.in);
int n = sn.nextInt();
sn.close();
您正在关闭当前的Scanner
,这将关闭用于读取数据的InputStream
,这意味着您的应用程序将不再接受用户的任何输入。 这就是为什么创建无法从System.in
读取的新Scanner
的原因。 即使您使用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();
}
首先,使用一个扫描仪,而不是每次都重新创建一个扫描仪。 此外,您的for循环还会多循环一次。
Scanner sn = new Scanner(System.in);
System.out.println("Give me a size ");
int n = sn.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < n; i++){
System.out.println("Give me a number ");
int in = sn.nextInt();
list.add(in);
}
sn.close();
这对我来说很好,最后列表包含了我输入的所有数字。
您可以通过打印列表进行测试:
System.out.println(list);
旧代码的问题在于,当您在Scanner上使用.close()
时,它将关闭基础InputStream
,即System.in
。 如果关闭System.in
,则无法在下一个扫描仪中再次使用它。 这就是为什么使用一个扫描仪可以解决此问题的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.