Java中的计算器程序不使用小数

时间:2014-07-27 22:00:52

标签: java

我试着编译我的第一个计算器,结果很好,除非我把十进制数字像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)

2 个答案:

答案 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]);
    }
}