0

テキスト ファイルからデータを読み取って 2 次元配列に入れるときに問題が発生しました。データセットのサンプルは次のとおりです。

1,2,3,4,5,6

1.2,2.3,4.5,5.67,7.43,8

このコードの問題は、最初の行を読み取るだけで、次の行を読み取らないことです。どんな提案でも大歓迎です。

package test1;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test1{ 

public static void main(String args[])throws FileNotFoundException, IOException{
try{    
   
double[][] X = new double[2][6];
BufferedReader input = new BufferedReader(new FileReader(file));

String [] temp;
String line = input.readLine();
String delims = ",";
temp = line.split(delims);
int rowCounter = 0;
while ((line = input.readLine())!= null) {
for(int i = 0; i<6; i++){
X[rowCounter][i] = Double.parseDouble(temp[i]);
}
    
rowCounter++;
} 

}catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
}finally{
}
}
}
4

5 に答える 5

2

Array ユーティリティを試しましたか? このようなもの:

while ((line = input.readLine())!= null) {  
  List<String> someList = Arrays.asList(line.split(","));
  //do your conversion to double here
  rowCounter++;
}

空白行が for ループをオフにしている可能性があると思います

于 2013-03-07T18:08:53.300 に答える
1

temp配列が割り当てられている唯一の場所は、whileループの前です。ループ内で配列を割り当てる必要がありtemp、ループまで読み取らないでBufferedReaderください。

String[] temp;
String line;
String delims = ",";
int rowCounter = 0;
while ((line = input.readLine())!= null) {
    temp = line.split(delims);  // Moved inside the loop.
    for(int i = 0; i<6; i++){
    X[rowCounter][i] = Double.parseDouble(temp[i]);
}
于 2013-03-07T18:11:41.550 に答える
1

試す:

int rowCounter = 0;
while ((line = input.readLine())!= null) {
String [] temp;
String line = input.readLine();
String delims = ",";
temp = line.split(delims);
for(int i = 0; i<6; i++){
X[rowCounter][i] = Double.parseDouble(temp[i]);
}
...
于 2013-03-07T18:06:16.257 に答える
0

readLine は、行末に改行文字が必要です。最後の行を読み取るには空白行を入れるか、代わりに read を使用する必要があります。

于 2013-03-07T18:17:02.007 に答える
0

コードを実行できませんでしたが、問題の 1 つは、最初のテキスト行だけを分割していたことです。

package Test1;

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

public class Test1 {

    public static void main(String args[]) {
        try {
            double[][] X = new double[2][];
            BufferedReader input = new BufferedReader(new FileReader(file));

            String line = null;
            String delims = ",";

            int rowCounter = 0;
            while ((line = input.readLine()) != null) {
                String[] temp = line.split(delims);
                for (int i = 0; i < temp.length; i++) {
                    X[rowCounter][i] = Double.parseDouble(temp[i]);
                }
                rowCounter++;
            }

        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
            e.printStackTrace();
        } finally {
        }
    }
}

読みやすくするためにコードをフォーマットしました。

2 次元配列の 2 番目の要素のサイズの設定は、1 行にいくつの数字があるかがわかるまで延期しました。

于 2013-03-07T18:18:12.747 に答える