0

テキスト ファイルからマトリックスを作成しようとしています。問題は、Buffered Reader 関数 readline() がファイルの最初の行の解析を完了すると、2 行目に来るが、それが空ではないとして読み取られることです。

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
4

3 に答える 3

1

明らかに間違っていることが 2 つあります。

  • i次元の 1 つが固定されており、ループを 5 回「展開」したため、variable は必要ありません。
  • インデックスを交換しました: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]);
}
于 2012-04-21T03:10:04.467 に答える
1

マトリックスに間違ったインデックスを使用しているようです。次のようにする必要があると思います。

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;
}
于 2012-04-21T03:10:49.437 に答える
0

あなたのファイルには、読者に余分な行があると思わせる奇妙な行末記号が含まれている可能性があります。

コードに空白行をスキップさせることができます:

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;
}
于 2012-04-21T03:52:46.157 に答える