每次我运行代码时,我都会收到相同的错误

时间:2020-04-14 11:29:50

标签: java

每次我运行程序时,谁能帮助我使用我的Java代码执行我的任务,但我不断收到此错误,而且我不知道该怎么办:

public class Earth {
private static double[][] arrayOfEarth;
public static void readDataArray(String filename) throws FileNotFoundException {
    Scanner input = new Scanner(new File(filename));
    int rows = 2500000;
    int columns = 3;

    arrayOfEarth = new double[rows][columns];
    while (input.hasNextLine()) {
        String[] line = input.nextLine().trim().split("/t ");
        for (int a = 0; a < arrayOfEarth.length; a++) {
            for (int b = 0; b < line.length; b++) {
                arrayOfEarth[a][b] = Double.parseDouble(line[b]);
            }
        }
    }
    System.out.println(Arrays.deepToString(arrayOfEarth));
}

Exception in thread "main" java.lang.NumberFormatException: For input string: "0    90  -4228"
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:543)
at com.company.assignment.Earth.readDataArray(Earth.java:22)
at com.company.assignment.Main.main(Main.java:9)

2 个答案:

答案 0 :(得分:0)

您需要在代码中解决以下问题:

  1. 使用\\t\\s+拆分。
  2. 使用嵌套for循环是错误的。您需要为行添加一个计数器(在我的代码中为i),并且您的while循环的每次迭代都需要对该计数器进行递增。

替换

while (input.hasNextLine()) {
    String[] line = input.nextLine().trim().split("/t ");
    for (int a = 0; a < arrayOfEarth.length; a++) {
        for (int b = 0; b < line.length; b++) {
            arrayOfEarth[a][b] = Double.parseDouble(line[b]);
        }
    }
}

使用

int i = 0;
while (input.hasNextLine()) {
    String[] line = input.nextLine().trim().split("\\s+");
    for (int j = 0; j < line.length; j++) {
        arrayOfEarth[i][j] = Double.parseDouble(line[j]);
    }
    i++;
}

答案 1 :(得分:-1)

有许多可能的问题根源。首先,应该有\t而不是/t,但是最好使用简单的“”-这可以肯定。另外,如果您使用的是Java旧版本,则parseDouble()和自动广播中可能会出现问题-这样您就必须对其进行更新。