每次我运行程序时,谁能帮助我使用我的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)
答案 0 :(得分:0)
您需要在代码中解决以下问题:
\\t
或\\s+
拆分。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()
和自动广播中可能会出现问题-这样您就必须对其进行更新。