0

カンマで区切られたファイルからx、y座標を読み込もうとしています。ただし、要素がArrayListに正しく追加されていません。ここでどこが間違っているのですか?

ArrayList<Double> xpointArrayList = new ArrayList<Double>();
ArrayList<Double> ypointArrayList = new ArrayList<Double>();
try {
    BufferedReader input = new BufferedReader(new FileReader(args[0]));
    String line;
    while ((line = input.readLine()) != null) {
        line = input.readLine();
        String[] splitLine = line.split(",");

        double xValue = Double.parseDouble(splitLine[0]);
        double yValue = Double.parseDouble(splitLine[1]);

        xpointArrayList.add(xValue);
        ypointArrayList.add(yValue);
    }
    input.close();

    } catch (IOException e) {

    } catch (NullPointerException npe) {

    }

    double[] xpoints = new double[xpointArrayList.size()];
    for (int i = 0; i < xpoints.length; i++) {
        xpoints[i] = xpointArrayList.get(i);
    }
    double[] ypoints = new double[ypointArrayList.size()];
    for (int i = 0; i < ypoints.length; i++) {
        ypoints[i] = ypointArrayList.get(i);
    }

xpoints配列とypoints配列でArray.toSring呼び出しを実行すると。番号は1つだけです。たとえば、ファイル内:

1,2
3,4
0,5

xpoints配列には3.0、ypoints配列には4.0しかありません。どこが悪いのですか?

4

3 に答える 3

6
while ((line = input.readLine()) != null) {
    line = input.readLine();

1行を読み取り、それを破棄してから、別の行を読み取ります。

すすぎ、繰り返します(ループなので)。

将来的には、デバッガーの使用を検討する必要があります。コードの実行中にコードをステップ実行して、何が起こっているかを正確に確認できます。それを使用することを学ぶことは非常に貴重です。

編集追加: GregHaskinsが以下のコメントを指摘しているように、あなたは問題を捕らえ、NullPointerExceptionそれに基づいて行動しないことによって問題を覆い隠しました。ループの2回目の反復では、ファイルに何も残っていないため、への2回目の呼び出しにlineなります。の呼び出しは、キャッチしたものをスローします...その後、黙って無視します。nullreadLine()split()NullPointerException

于 2012-12-06T05:07:30.533 に答える
1

Scannerクラスを使用して入力を読み取ることもできます。以下は、ScannerクラスとFileクラスを使用してファイルを読み取るコードの変更バージョンです。

ArrayList<Double> xpointArrayList = new ArrayList<Double>();
ArrayList<Double> ypointArrayList = new ArrayList<Double>();
try {
    Scanner input = new Scanner(new File("testing.txt"));
    String line;
    while (input.hasNextLine()) {
        line = input.nextLine();
        String[] splitLine = line.split(",");

        double xValue = Double.parseDouble(splitLine[0]);
        double yValue = Double.parseDouble(splitLine[1]);

        xpointArrayList.add(xValue);
        ypointArrayList.add(yValue);
    }
    input.close();

    } catch (IOException e) {

    } catch (NullPointerException npe) {

    }

    double[] xpoints = new double[xpointArrayList.size()];
    for (int i = 0; i < xpoints.length; i++) {
        xpoints[i] = xpointArrayList.get(i);
    }
    double[] ypoints = new double[ypointArrayList.size()];
    for (int i = 0; i < ypoints.length; i++) {
        ypoints[i] = ypointArrayList.get(i);
    }
于 2012-12-06T05:13:46.987 に答える
1

あなたの読書スタイルは正しくありません。readLine()を2回呼び出しています。1つは上部にあり、もう1つはwhile()ループに入った直後です。このように、uはすべてのポイントを処理しているわけではありません。一部のポイント座標が無視されています。を使用する必要があります。

while ((line = input.readLine()) != null) {

//line = input.readLine(); */Remove this */

*/your code */

}
于 2012-12-06T05:13:53.000 に答える