我正在尝试从命令行读取输入并将其放在ArrayList
中。我在程序中多次执行,但有一次抛出NoSuchElementException
。我做错了什么?
public static ArrayList<Double> getInfoTwo ()
{
ArrayList<Double> infoListTwo = new ArrayList<Double>();
Scanner in = new Scanner(System.in);
System.out.println("Please enter your total hours: ");
infoListTwo.add(in.nextDouble());
in.close();
return infoListTwo;
}
答案 0 :(得分:0)
看起来你的in.NextDouble()正在抛出这个。 根据Javadoc(http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextDouble())
这是因为没有数据供扫描仪阅读。尝试使用in.hasNextDouble()
围绕该调用
public static ArrayList<Double> getInfoTwo ()
{
ArrayList<Double> infoListTwo = new ArrayList<Double>();
Scanner in = new Scanner(System.in);
System.out.println("Please enter your total hours: ");
if (in.hasNextDouble()) {
infoListTwo.add(in.nextDouble());
}
in.close();
return infoListTwo;
}
&#13;
答案 1 :(得分:0)
问题在于:
当您在运行整个程序时只运行一次getInfoTwo()
方法时,没有问题。但是当您多次调用此方法时,例如在循环中,会发生异常。
这可能是因为关闭了扫描仪输入流。第二次程序到达infoListTwo.add(in.nextDouble());
时,inputStream将关闭。请注意,in.close();
将关闭下面的inputStream,并且您传递给Scanner的inputStream是System.in。 System.in
是一个静态变量。因此,当您在程序的一个运行会话中关闭它时,下次它已经关闭时。
顺便说一句,重要的是要解决这个问题。如果您需要从控制台读取多个输入并将其存储在List中,最好的解决方案是将read n输入的业务从控制台移动到getInfoTwo()方法,如下所示:
public static ArrayList<Double> getInfoTwo(int n) {
ArrayList<Double> infoListTwo = new ArrayList<Double>();
Scanner in = new Scanner(System.in);
for (int i = 0; i < n; i++) {
System.out.println("Please enter your total hours: ");
infoListTwo.add(in.nextDouble());
}
in.close();
return infoListTwo;
}
希望这会有所帮助,
祝你好运。