gpt4 book ai didi

Java Scanner - 当项目总数未知时输入空格分隔的 double

转载 作者:行者123 更新时间:2023-11-30 07:37:00 25 4
gpt4 key购买 nike

我有一个简单的 Java 程序,正在 Eclipse 中运行。我从命令行传递了大约 100 个空格分隔的 double 列表,但是,请假设我不知道可以传递多少个项目。

目前我正在阅读整行,然后标记化并转换为 double ,如下所示:

    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]));
}

所以,我相对有信心上述并不是解决此类问题的最佳方法。我想做的事情更像下面的代码,但是当我在控制台中输入数据并按 Enter 键时,程序无法响应,因为它没有将我的输入识别为 double 列表。

    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() 之后;调用但这没有什么区别。

我在这里做错了什么,或者我应该采取更好的方法。

提前谢谢您。

最佳答案

这是因为 while 循环。该程序将永远等待来自 System.in 的更多输入,因为 sc.hasNextDouble() 每次都会评估为 true,因为来自 System.in 的输入是无限的,与来自文件的输入不同。

对我来说,如果您想将所有 double 放在一行中,您拥有的第一个解决方案似乎是可行的方法。但您可以稍微清理一下并使用 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));
}

关于Java Scanner - 当项目总数未知时输入空格分隔的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com