Java。从文件中读取变量 a、b 和 c 的二次公式程序。意外的错误

Java. Quadratic formula program with variables a, b, and c read from file. Unexpected error

我正在编写一个程序,它从文件中读取除第一行以外的每行 3 个数字,双精度数或整数。第一行是后面的行数。每行的3个数是二次公式中的变量a、b、c。然后程序应该 return 公式的 + 和 - 部分之间的差异。这是文件可能包含的内容的示例。

3
1 2 4
1.5 3.12 4.31
0.09 5 2

我的问题是当使用扫描仪将文件中的标记转换为双精度值以便将它们输入到二次公式时,出现以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "­1"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
    at java.lang.Double.parseDouble(Double.java:540)
    at gorf.main(gorf.java:23)

这是我的部分代码:

    int lines = Integer.parseInt(sc.nextLine());
    double a;
    double b;
    double c;

    String line = "";
    Scanner abc = new Scanner(line);
    for(int count = 0; count < lines; count++)
    {
        line = sc.nextLine();
        abc = new Scanner(line);

        a = Double.parseDouble(abc.next());
        b = Double.parseDouble(abc.next());
        c = Double.parseDouble(abc.next());
    }

您的文件不干净。你在那里隐藏了不可见的字符。

使用以下代码找出让您悲伤的角色:

int lines = Integer.parseInt(sc.nextLine());
double a;
double b;
double c;

String line = "";
Scanner abc = new Scanner(line);
for (int count = 0; count < lines; count++) {
    line = sc.nextLine();
    abc = new Scanner(line);

    a = Double.parseDouble(readNextAndLog(abc));
    b = Double.parseDouble(readNextAndLog(abc));
    c = Double.parseDouble(readNextAndLog(abc));
}

readNextAndLog方法:

private static String readNextAndLog(Scanner sc) {
    String s = sc.next();

    for (int i = 0; i < s.length(); i++) {
        System.out.println((int)s.charAt(i));
    }

    return s;
}

注意异常发生前打印的数字。有问题的字符的 Unicode 值将打印在那里。

然后您必须弄清楚意外是如何首先进入您的文件并删除它,或者从头开始重新创建您的文件。

编辑:

您的问题角色是SOFT HYPHEN (U+00AD) character

这个角色不应该是不可见的,但已知 handled/rendered 不一致。 (Yes, SOFT HYPHEN is a hard problem)

确保您的文件不包含该字符。确保您使用的编辑器不会以某种意想不到的方式弄乱您的文件。例如像 Notepad++ 这样的编辑器。