-1

テキストファイルを1行ずつ読み込もうとしています。各行には、コンマで区切られた2つの二重の数字があります(x、yポイントを表します)。それらをファイル内に配置するために、2つのdouble配列(1つはxポイントを含み、もう1つはyポイントを含む)に配置したいと思います。配列は、ファイル内のポイント数(つまり、ファイル内の行数)と同じサイズである必要があります。

ファイルのポイント数が異なる可能性があるため、すべてのファイルに対して固定サイズを宣言したくありません。どうすればこれを行うことができますか?

編集

私がこれをしている方法に何か問題があります:

BufferedReader input; 

ArrayList<Double> xpointArrayList = new ArrayList<Double>();
ArrayList<Double> ypointArrayList = new ArrayList<Double>();
try {
    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

4 に答える 4

1

すでに開いてファイルから読み取る簡単な方法は、カウンターをループに入れてすべての行を読み取ることです。

  int count =0;
  while ((strLine = br.readLine()) != null)   {
      count++;
      System.out.println( strLine + " : "+ count);
  }
于 2012-12-06T01:40:39.687 に答える
1

ArrayListタイプのシングルを作るだけではどうですかPoint。anArrayListはコンテンツのサイズに合わせて大きくなるため、次のようなことを行うのと同じくらい簡単なはずです (疑似コード)...

ArrayList<Point> points = new ArrayList<Point>();

for (each line of the file){
    String line = file.readLine();
    String[] splitLine = line.split(",");

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

    points.add(new Point(xValue,yValue));
}

このPointクラスは、2 つのdouble値のコンテナとして設計されており、抽象ポイントを表すために使用されます。これは、ニーズに完全に適合する必要があります。ポイントのドキュメントを参照してください。

本当に 2 つのアレイを使用する必要がある場合は、1 つのアレイを使用することをお勧めしますArrayList<Double>

ArrayList<Double> xPoints = new ArrayList<Double>();
ArrayList<Double> yPoints = new ArrayList<Double>();

for (each line of the file){
    String line = file.readLine();
    String[] splitLine = line.split(",");

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

    xPoints.add(xValue);
    yPoints.add(yValue);
}

詳細については、ArrayListのドキュメントを参照してください。

本当に配列を使用する必要がある場合は、次のArrayListように配列に変換できます...

Double[] xArray = (Double[])xPoints.toArray();
Double[] yArray = (Double[])yPoints.toArray();
于 2012-12-06T01:37:20.060 に答える
1

しないでください。可変サイズの配列を求めています。ArrayList を使用します。初期サイズを指定する必要はなく、必要に応じて大きくなります。さらに、このデータを処理するポイント クラスを作成する価値があるかもしれません。そうすれば、ポイントのリストを取得できます。

public class Point
{
private double x;
private double y;

public point(double x, double y)
{
this.x = x;
this.y = y;
}

public double getX()
{
return x;
}

public double getY()
{
return y;
}
}

List<Point> myPoints = new ArrayList<Point>();

そして、通常の配列が本当に好きなら: myPoints.toArray();

于 2012-12-06T01:37:59.140 に答える
0

FileObject.length() はファイル内のバイト数を返し、それを double 型整数のサイズ (8 バイト?) で割ると、ファイルに格納されている double 変数の数が得られ、その数を 2 で割りますもう一度(または元の数値を 4 で割ります)、質問を正しく理解できれば、ファイルの行数がわかるはずです。

于 2012-12-06T01:33:12.700 に答える