我认为这里的问题是一个愚蠢的语法问题,但事实确实如此。我正在编写一个程序,该程序采用CSV文件,它是3行4列数字。我在运行时将该文件作为参数,然后在换行符(\ n)处拆分,然后在逗号分隔符处拆分。然后,将其存储到String类型的“ 2D数组”中。然后,我取每个值,解析为两倍,然后填充第二个“ 2D数组”,但这次为两倍。一切都很好。

我的问题是当我尝试采用所有这些代码并将其放入自己的类中时。我在主体中添加了一个构造函数,并在该类中复制并粘贴了以前的工作代码。但是现在,当从字符串解析为双精度时,从第4个元素移到第5个元素时会出现NumberFormatException。完全相同的代码在主体中编码时有效。

我认为我对课程的了解是我的问题。

这是我正在上的课:

import java.lang.*;

public class DataMatrix {

    private double[][] dMatrix;

    public DataMatrix(String text) {

        String[] line = text.split("\n");
        // Creates an array for the CSV file
        String[][] sMatrix = new String[line.length][];

        for(int i=0; i < line.length; i++)
            sMatrix[i] = text.split(",");
        System.out.println("Original String: ");

        for(int x=0; x < sMatrix.length; x++) {
            for(int j=0; j <= line.length; j++) {
                System.out.println(sMatrix[x][j]);
            }
        }

        double[][] dMatrix = new double[sMatrix.length][];
        System.out.println("Converted to double: ");

        for(int x=0; x < sMatrix.length; x++) {
            dMatrix[x] = new double[sMatrix[x].length];
            for(int j=0; j <= sMatrix.length; j++) {

                dMatrix[x][j] = Double.parseDouble(sMatrix[x][j]);
                System.out.println(dMatrix[x][j]);
            }
        }
    }
}


这是我的主要内容(忽略评论,当我从中复制/粘贴内容时使用它们):

import java.lang.*;

public class Assignment1{
    public static void main(String[] args){

//  DecimalFormat df = new DecimalFormat("#.##");

        //Make sure the user passed the command line argument - and nothing else
        if (args.length != 1){
            System.out.println("Assignment1 takes exactly one command-line argument.");
            System.out.println("Usage: java Assignment1 some_file.csv");
            System.exit(0);
        }

        String csvFileName = args[0];

        //Instantiate my custom file reader
    CSVReader fileReader = new CSVReader();

        //Read the file into a string
        String text = fileReader.readFile(csvFileName);
    DataMatrix matrix = new DataMatrix(text);

}//end of main
}//end of class


编辑:这是我的输出:

Files contents:
1,2,3,4
3,4,1,0
2,3,4,2

Original String:
1
2
3
4
3
4
1
0
2
3
4
2

Converted to double:
1.0
2.0
3.0
Exception in thread "main" java.lang.NumberFormatException: For input string: "4 3"

at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.parseDouble(Double.java:540)
at DataMatrix.<init>(DataMatrix.java:30)
at Assignment1.main(Assignment1.java:22)

最佳答案

构造函数中的局部变量dMatrix隐藏属性dMatrix

只需通过double[][] dMatrix = new double[sMatrix.length][];在构造函数代码中更改dMatrix = new double[sMatrix.length][];

10-08 12:53