Java 文件中的矩阵

Java 文件中的矩阵,java,Java,我正在尝试从文本文件创建一个矩阵。问题是,当缓冲读取器函数readline()解析完文件的第一行后,它会进入第二行,但它的读取结果是空的,而不是空的 void covar() { double [][]covar=new double[10][5]; int i=0; int j=0; try { FileInputStream fstream = new FileInputStrea

我正在尝试从文本文件创建一个矩阵。问题是,当缓冲读取器函数readline()解析完文件的第一行后,它会进入第二行,但它的读取结果是空的,而不是空的

void covar()
    {
        double [][]covar=new double[10][5];
        int i=0;
        int j=0;
        try
        {
            FileInputStream fstream = new FileInputStream("class 1\\feature_vector.txt");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String input;

            while((input=br.readLine())!= null)
            {               
                String [] temp=input.split(",");
                //System.out.println(input.split(",").length);
                covar[i][j]= new Double(temp[0]);
                covar[i+1][j]=new Double(temp[1]);
                covar[i+2][j]=new Double(temp[2]);
                covar[i+3][j]=new Double(temp[3]);
                covar[i+4][j]=new Double(temp[4]);
                //i=0;
                j++;
            }

            in.close();
        }
        catch(Exception e)

        {
            e.printStackTrace();

        }
上面是代码。文件名是完美的,流没有任何问题。你们能帮我解决这个问题吗

以下是该文件的内容:

0.75,321.0,0.22429906,0.97507787,1.966202512778112
0.33333334,135.0,-0.014814815,1.0,5.323770568766052
0.64285713,311.0,0.025723472,1.0,4.764298570227433
0.6,188.0,0.03723404,1.0,4.7349608150168105
0.25,189.0,0.16931216,0.98941797,7.15681209803803
0.71428573,194.0,-0.26804122,0.96391755,5.1654456838422425
0.6,173.0,0.028901733,1.0,6.54275787030257
0.2857143,257.0,0.031128405,1.0,6.095356508899233
0.23076923,197.0,-0.04568528,1.0,3.784908227189768
0.18181819,231.0,0.17316018,0.987013,5.956322938602553

有两件事显然是错的:

  • 您不需要变量
    i
    ,因为其中一个维度是固定的,您将循环“展开”五次
  • 您交换了索引:
    j
    应该先执行,这是从
    0
    更改为
    9
    的索引
例如:

String [] temp=input.split(",");
covar[j][0] = new Double(temp[0]);
covar[j][1] =new Double(temp[1]);
covar[j][2] =new Double(temp[2]);
covar[j][3] =new Double(temp[3]);
covar[j][4] =new Double(temp[4]);
您可以将循环放回以缩短代码:

String [] temp=input.split(",");
for (int i = 0 ; i != 5 ; i++) {
    covar[j][i] = new Double(temp[i]);
}

看起来你用错了符号,我想应该是这样的:

int i = 0;
while((input=br.readLine())!= null) {               
    String [] temp=input.split(",");
    //System.out.println(input.split(",").length);
    covar[i][0]= new Double(temp[0]);
    covar[i][1]=new Double(temp[1]);
    covar[i][2]=new Double(temp[2]);
    covar[i][3]=new Double(temp[3]);
    covar[i][4]=new Double(temp[4]);
    ++i;
}

您的文件可能有一些奇怪的行终止符,使读者认为有一个额外的行

您可以尝试让代码跳过空行:

while((input=br.readLine())!= null) {
    if( input.length() > 0 ){
        String [] temp=input.split(",");
        for (int i = 0 ; i != 5 ; i++) {
            covar[j][i] = new Double(temp[i]);
        }
    }
    ++j;
}

我之前认为我应该强制i为0,然后意识到根据我的要求这是不必要的,所以我把它放在注释中。这与问题无关,但是:DataInputStream完全没有必要,删除它。如果我删除DataInputStream,那么我将如何从文件中获取数据流?直接从FileInputStream中获取,意思是
BufferedInputStream(fstream)
感谢您的回复。我要做的是从一个文件中获取数据,该文件的数据格式类似于第1行(1,2,3,4,5)第2行(6,7,8,9,10),现在我需要将这些数据按大小为2X5的相同顺序添加到矩阵中。我正试图按照上面所说的那样去做,但显然我遗漏了一些东西。请开导。谢谢again@user1347525那么你的矩阵应该是
[2][5]
@user1347525当你修改你的代码以适应上面的情况时,你会得到错误吗?物品的顺序是否错误?请更具体地说明您看到的错误。@dasblinkenlight:问题不在于插入矩阵的数据序列,而在于“input=br.readLine()”这部分。对于文件的第一行,输入将读取整行,while循环中的代码运行良好。现在,当循环运行到第二行时,不知何故输入=“因此中间的代码,而循环没有运行。@user1347525是否可以编辑该问题以添加文件的内容?缩进四个空格,以便于阅读。