【发布时间】:2017-12-05 09:47:56
【问题描述】:
我正在尝试创建一个实用程序类以使用 java.util.Scanner
从 标准控制台 获取输入package dbasics;
import java.util.*;
public class Utils {
public static int getNumericInput() {
System.out.println("Enter a integer ");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
return n;
}
public static int[] getNumericArrayInput(int n) {
//System.out.println("Enter "+n+" integers seperated by a whitespace ");
int[] numbers = new int[n];
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < n; i++) {
numbers[i] =scanner.nextInt();
}
scanner.close();
return numbers;
}
}
在另一个类中调用 static 方法时,方法 getNumericInput() 可以正常工作,但以下方法 getNumericArrayInput(int n) 会导致异常。
package dbasics;
public class Demo {
public static void main(String[] args) {
int n = Utils.getNumericInput();
System.out.println("Number "+n);
int arr[] = Utils.getNumericArrayInput(n);
for(int i : arr) {
System.out.println(i);
}
}
}
运行此程序会导致以下异常
Enter a integer
5
Number 5
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at dbasics.Utils.getNumericArrayInput(Utils.java:21)
at dbasics.Demo.main(Demo.java:9)
我注意到的有趣的事情是,如果我注释掉第一个输入过程,数组输入工作正常
【问题讨论】:
-
您应该始终使用 try 来处理像 Scanner 这样可关闭的类的资源。您的第一次调用可能会在输入流关闭时关闭它。