0

複数行の csv ファイルを取得し、そのファイルの内容を配列リストとして返すメソッドを作成しようとしています。私の問題は、配列行を印刷すると、ファイルの最後の行の内容しかないように見えることです。私が知らない FileReader または BufferedReader に関する何かではないかと疑っています。とにかく、ここにコードがあります:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public int[][] readCSV(String pFilename) throws NumberFormatException, IOException {




int[][] arr = new int[19][19];



    BufferedReader br = new BufferedReader(new FileReader(pFilename));   
    String line = " ";
    String [] temp;

    while ((line = br.readLine())!= null){ 
        temp = line.split(","); //split spaces

        for(int i = 0; i<arr.length; i++) {
            for (int j = 0; j<arr.length; j++) {    
                arr[i][j] = Integer.parseInt(temp[j]);
            }
        }

    }

    printArray(arr);
}

public static void printArray (int[][] arr) { 
         for (int i =0; i <arr.length; i++) {
          for (int j = 0; j < arr.length; j++) {
            System.out.print(arr[i][j]);
          }
          System.out.println("");
         }
    }   



    }

入力

1,1,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1
1,0,0,1,1,1,1 ,0,1,1,1,0,1,1,1,0,1,0,1
1,0,0,1,0,0,1,1,1,1,1,1,1, 1,1,0,1,1,0
1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1
1, 1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,0
1,1,1,1,1,1,1,1 ,1,1,1,1,1,0,1,0,1,1,1
1,1,1,0,0,0,1,1,1,0,1,1,1,1, 1,0,1,0,1
0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1
1,1, 1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,0,1
1,1,1,0,1,1,1,0,1 ,0,1,1,1,1,0,1,1,1,1
0,0,1,1,1,1,1,0,0,1,0,1,1,0,1, 1,0,1,0
1,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0
1,1,1, 1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1
1,0,1,0,1,1,1,1,1,1 ,0,1,1,1,1,1,0,1,1
1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1, 0,1,0
1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0
1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1
0,1,0,0,1,1,0 ,1,0,1,1,1,0,1,1,0,1,1,1
1,1,0,0,1,1,1,1,1,1,0,0,1, 1,0,1,0,1,0
0,1,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0

印刷出力

0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110
0111001111110101110

4

3 に答える 3

0

固定配列を使用しているため、CSV の行と列は固定されていると仮定します。動的な場合は、最初に行と列を計算してから配列を初期化するか、より優れた動的データ構造を使用する必要があります。

配列に繰り返し値を割り当てているため、コードに誤りがあります。

次のように変更します。

BufferedReader br = new BufferedReader(new FileReader(pFilename));   
String line = " ";
String [] temp;

while ((line = br.readLine())!= null){ 
    temp = line.split(","); //split spaces

       for (int j = 0; j<temp.length; j++) {    
            arr[i][j] = Integer.parseInt(temp[j]);
        }
    i++;
}
于 2013-07-26T00:25:46.190 に答える
0
while ((line = br.readLine())!= null){ 
        temp = line.split(","); //split spaces

        for(int i = 0; i<arr.length; i++) {
            for (int j = 0; j<arr.length; j++) {    
                arr[i][j] = Integer.parseInt(temp[j]);
            }
        }

    }

これは、入力行ごとに配列全体を書き換えているためです。したがって、最後の 1 つだけが「生き残り」ます。

iインデックスを現在の行番号に関連付けたままにします (外側のループの反復ごとにfori++を実行し、別の for ループをネストしないでください)。

于 2013-07-24T04:35:33.937 に答える