2

コードに 1 5/8 を入力しようとしていますが、次のエラーが引き続き発生します。

走る:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1 5/8"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)
at ClientCode.main(ClientCode.java:42)

Java Result: 1
BUILD SUCCESSFUL (total time: 17 seconds)

これは私のコードです:

[code] public double findFrac(int whole, String frac) {
  if (frac == null || frac.equals(""))
    return whole;
String[] parts = frac.split("/");
return whole + Integer.parseInt(parts[0]) / (double)Integer.parseInt(parts[0]);    
4

5 に答える 5

1

このDouble.parseDoubleメソッドは分数をまったく理解していません。どうすればよいかわかりません1 5/8。のようなものが必要です1.625

分数を解析するには、自分で解析するか、どこかのライブラリでこのタスクを実行する必要があります。

Double.valueOfメソッドも解析します( a の代わりに aStringsを作成するだけです) は、許可されているものを指定するために長さを調整し、 a をスローしません。DoubledoubleNumberFormatException

于 2013-10-07T20:12:45.607 に答える
0

この問題については、strings を処理するだけです。入力が正しければ、少なくとも 1 つの部分と最大 3 つの部分があります。これらの部分はスペースとスラッシュのみで区切られているため、正規表現で区切ることができます。例えば:

public class Main {
    public static void main(String[] args) {
        System.out.println(parseFraction("1 4/2"));
        System.out.println(parseFraction("6/2"));
        System.out.println(parseFraction("3"));
    }

    public static double parseFraction(String input) {
        String[] array = input.split("[ /]");
        switch (array.length) {
        case 1: // e.g. "1"
            return Double.parseDouble(array[0]);
        case 2: // e.g. "1/2"
            return Double.parseDouble(array[0]) / Double.parseDouble(array[1]);
        case 3: // e.g. "1 2/3"
            return Double.parseDouble(array[0]) + 
                    Double.parseDouble(array[1]) / Double.parseDouble(array[2]);
        default:
            throw new IllegalArgumentException("Wrong input!");
        }
    }
}

入力は同等であるため、出力はすべての場合で同じです。

3.0
3.0
3.0
于 2013-10-07T20:50:16.487 に答える