我正在写一个程序,我必须得到一个用户输入,保存为一个双精度。用户必须能够同时使用“,”和“.”作为分隔符—不管他们想要什么。我尝试使用usedelimiter,它只能部分工作-它确实接受两个值(例如4.5和4,5),但当我后来在数学公式中使用输入的值时,我得到了错误的结果-它似乎将用户输入向下舍入到最接近的整数,并作为一种效果,无论我输入,4或4.5或4,5或4.8等。,我得到了相同的结果,实际上只对4适用。有人知道它为什么不起作用吗?
double protectiveResistor=0; //must be a double, required by my teacher
double voltage= 5;
System.out.println("Please provide the resistance.");
Scanner sc= new Scanner(System.in);
sc.useDelimiter("(\\p{javaWhitespace}|\\.|,)");
try
{
protectiveResistor=sc.nextDouble();
}
catch(InputMismatchException exception)
{
System.out.println("Wrong input!");
System.exit(1);
}
if (protectiveResistor<0){
System.err.println("Wrong input!");
System.exit(1);
}
double current = (double)voltage/protectiveResistor;
double power = (double)current*current*protectiveResistor;
谢谢您!
3条答案
按热度按时间yqhsw0fo1#
usedelimiter()所做的是分割指定分隔符上的输入。例如,如果您有
4,5
,以下代码将打印“4”。如果您还想打印第二部分,在“,”之后,您需要添加另一行以获得下一个值,在本例中,这将打印“4 5”:
在代码中,可以这样做:
这段代码所做的是将输入拆分为空格“,”和“,”。对于浮点值,您希望小数点前有一部分,小数点后有一部分。因此,您希望扫描器将输入分成两部分。这两部分被分配给两个变量,
firstPart
以及secondPart
. 在最后一步中,这两个部分与“.”一起作为小数点,正如java所期望的那样,并解析回double类型的变量。ffvjumwh2#
这个
useDelimiter
方法是告诉Scanner
哪个字符能把数字分开。它不是用来指定小数点的字符。如果用户输入4.5
或者4,5
,的Scanner
将其视为两个独立的输入,4
以及5
.不幸的是
Scanner
无法将两个不同的字符指定为十进制分隔符。你唯一能做的就是分别扫描这两个数字,然后把它们合并成一个十进制数。您将希望将它们扫描为String
值,这样就不会丢失小数点后的任何零。lnlaulya3#
一个简单的方法是用点代替逗号。
演示:
示例运行:
另一个示例运行: