我有一个简单的Java程序,我在Eclipse中运行。从命令行我传递了大约100个空格分隔的双打列表,但请假设我不知道可以传入多少项目。
目前我正在阅读整行,然后进行标记并转换为双打,如下所示:
Scanner sc = new Scanner(System.in);
ArrayList<Double> stock = new ArrayList<Double>();
String s = sc.nextLine();
String[] split = s.split("\\s+");
for (int i=0; i<split.length; i++)
{
stock.add(Double.parseDouble(split[i]));
}
因此,我相对确信上述不是解决此类问题的最佳方法。我想做更像下面代码的事情,但是当我在控制台中输入数据并点击回车时,程序无法响应,因为它没有将我的输入识别为双打列表。
Scanner sc = new Scanner(System.in);
ArrayList<Double> stock = new ArrayList<Double>();
while (sc.hasNextDouble())
{
double d = sc.nextDouble();
stock.add(d);
}
所以,目前第一个代码示例工作正常,第二个代码没有做任何事情。顺便说一句,我试过添加sc.nextLine();在sc.nextDouble()之后;打电话,但这并没有什么不同。
我在这里做错了什么,或者我应该采取更好的方法。
提前谢谢。
答案 0 :(得分:1)
这是因为while循环。 该程序将永远等待来自System.in的更多输入,因为sc.hasNextDouble()每次都会评估为true,因为来自System.in的输入是无限的,与文件的输入不同。
对我来说,如果你想要一行中的所有双打,那么你的第一个解决方案似乎就是这样。 但你可以稍微清理它并使用for-each而不是常规的for循环。
示例:
Scanner scanner = new Scanner(System.in);
ArrayList<Double> doubles = new ArrayList<Double>();
String inputLine = scanner.nextLine();
String[] splittedInputLine = inputLine.split("\\s+");
for(String doubleString : splittedInputLine) {
doubles.add(Double.parseDouble(doubleString));
}