【问题标题】:How to read doubles out of a scanner and put them into an arraylist如何从扫描仪中读取双精度并将它们放入数组列表中
【发布时间】:2016-10-26 18:24:47
【问题描述】:
Scanner data = new Scanner("2.30 4.50 10.35 200.61 82.00");
ArrayList<Double> test = new ArrayList<Double>();

这就是我所拥有的,我不需要从鼠标中获取输入,但我拥有可以使用扫描仪来输入我的值。我正在测试一个从以下位置检索和存储数据的类和一个数组列表,但我需要先将扫描仪中的值放入列表中。

while(data.hasNextDouble()) {
    testUno.add(data.nextDouble()); 
}

后来我尝试做这样的事情,但没有奏效。

【问题讨论】:

  • 我的建议:发布您拥有的代码(所有相关部分)说明您想要什么以及什么不起作用
  • 如果您使用标准输入向您的应用程序提供输入,则应将 Scanner 创建为新的 Scanner(System.in)
  • 它应该可以正常工作。作为@RC。声明,为我们提供更多代码,因为扫描仪不是问题。
  • 您已将 ArrayList 声明为测试,但在 while 循环中您将其称为 testUno
  • @Brunaldo 有道理

标签: java arrays double java.util.scanner


【解决方案1】:

您需要明确设置一个Locale,该Locale 使用一个点作为小数分隔符(就像在您的输入值中一样),否则如果您的默认语言环境使用逗号作为分隔符,您的值将不会被Scanner 视为double 这样hasNextDouble() 将返回false,为此使用Scanner#useLocale(locale) 作为下一步:

Scanner data = new Scanner("2.30 4.50 10.35 200.61 82.00");
// Set the locale to US as it is a locale that uses a dot as decimal separator
data.useLocale(Locale.US);
List<Double> testUno = new ArrayList<>();
while(data.hasNextDouble()) {
    testUno.add(data.nextDouble());
}
System.out.println(testUno);

输出:

[2.3, 4.5, 10.35, 200.61, 82.0]

Scanner#useLocale(Locale locale)

将此扫描仪的语言环境设置为 指定的语言环境。扫描仪的语言环境会影响其许多元素 默认原始匹配正则表达式;见localized numbers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多