我试着编译我的第一个计算器,结果很好,除非我把十进制数字像14.6这给了我一个错误。仅当我使用"。"时才会出现此错误。 (点符号)而不是我使用","。那是为什么?
以下是代码:
import java.util.Scanner;
public class calc {
public static void main (String args[]){
Scanner fab = new Scanner (System.in);
double fnum, snum, sum;
System.out.println("Enter first number: ");
fnum = fab.nextDouble();
System.out.println("Enter second number: ");
snum = fab.nextDouble();
sum = fnum + snum;
System.out.println (sum);
}
}
如果您需要,这就是错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at calculator.calc.main(calc.java:9)
答案 0 :(得分:4)
试试这个
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.getDefault());
System.out.println(dfs.getDecimalSeparator());
你会看到它打印出来
,
以上是Scanner
类选择其小数分隔符的方法。您的Locale
使用,
作为小数点分隔符。
在创建Scanner
对象之前,您可以使用
Locale.setDefault(Locale.Category.FORMAT, newLocale);
使用Locale
作为小数点分隔符设置不同的默认.
。
或者,您可以使用Scanner#useLocale(newLocale)
为Locale
对象设置不同的Scanner
。
答案 1 :(得分:0)
您可以将用户的输入读作String
&而不是使用简单的if
语句进行检查。给定值是否包含不需要的字符。如果是,则使用String.replace(oldChar, newChar)
方法替换它。
import java.util.Scanner;
public class Demo {
public static void main(String argsp[]) {
Scanner scanner = new Scanner(System.in);
String[] lines = new String[2];
System.out.println("Enter first number:");
lines[0] = scanner.nextLine();
System.out.println("Enter second number:");
lines[1] = scanner.nextLine();
scanner.close();
double[] numbers = new double[2];
for (int i = 0; i < 2; i++) {
if (lines[i].contains(",")) {
lines[i] = lines[i].replace(",", ".");
numbers[i] = Double.parseDouble(lines[i]);
} else {
numbers[i] = Double.parseDouble(lines[i]);
}
}
System.out.println(numbers[0] + numbers[1]);
}
}