我尝试编译我的第一个计算器,结果很好,除非我输入像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)
试试这个
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.getDefault());
System.out.println(dfs.getDecimalSeparator());
你会看到它打印出来
,
以上是Scanner
类选择小数分隔符的操作。看起来您的Locale
使用,
作为小数分隔符。
在创建Scanner
对象之前,可以使用
Locale.setDefault(Locale.Category.FORMAT, newLocale);
设置不同的默认Locale
, .
作为十进制分隔符。
或者,您可以使用Scanner#useLocale(newLocale)
为您的Scanner
对象设置不同的Locale
您可以将用户的输入读取为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]);
}
}