gpt4 book ai didi

java - parseDouble 与 nextDouble

转载 作者:行者123 更新时间:2023-11-30 06:51:04 32 4
gpt4 key购买 nike

我有以下代码:

Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) {
System.out.println(Double.parseDouble(in.nextLine()));
}

输入:

1.1
2.2
3.3

程序在读取此输入后停止,而正如我假设的那样,它仍应从输入中读取。这是为什么?

最佳答案

问题可能是您的默认语言环境使用逗号作为分隔符。
Double.parseDouble() - 始终使用点作为分隔符。
in.nextDouble() - 使用区域设置指定的分隔符。
结果是其中一种方法可以使用逗号作为分隔符,而另一种方法使用点。

要解决该问题,您应该统一从输入中读取/解析 double 的方法,并决定要使用的分隔符。
您可以设置分隔符的类型,例如使用:
1. 点分隔符:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);

或:

Scanner in = new Scanner(System.in);
in.useDelimiter("\\.");

2。 逗号分隔符:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.FRENCH);

Scanner in = new Scanner(System.in);
in.useDelimiter(",");

所以重构你的代码:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);
while (in.hasNextDouble()) {
System.out.println(Double.parseDouble(in.nextLine()));
}


要清楚地看到问题,您可以使用此代码:

Locale.setDefault(Locale.FRANCE);
Scanner in = new Scanner(System.in);
System.out.println(in.hasNextDouble());
Double.parseDouble(in.nextLine());

输入:1,1

hasNextDouble() 的结果为真,而 Double.parseDouble(in.nextLine()) 抛出 NumberFormatException。

希望对您有所帮助。

关于java - parseDouble 与 nextDouble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551038/

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