-3

これは私が研究しているダイクストラのアルゴリズムのウェブサイトですが、エッジのデータはプログラムの内部で作成されます。私が欲しいのは、データをテキストファイルとして持つことです。テキストファイルを作成し、行ごとに文字列として読み取ることもできます。

しかし、プログラム内のテキスト ファイルからこれらのデータを使用する方法がわかりません。誰でも私に提案をお願いできますか?

私のデータはこのようになり、グラフを作成しています

始点、終点、費用

2 3 1

2 4 1

2 5 2

2 6 2

3 1 1

3 2 1

3 4 1


これは、ファイルを読み取るために今のところ持っているコードです。すべての行または特定の行を印刷できます。配列リストのデータを読み取ります。しかし、行分割 (String[] fields = line.split(" ");) を実行したいので、データ内の 1 つの数値を出力できます。しかし、私がそれをコードに入れるとき、私はそうすることができません。誰かが私のためにそれを追加してください。

ファイル file = new File("data1.txt");

    List<String> lines = new ArrayList<String>();

    try{
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            lines.add(scanner.nextLine());

        }
        scanner.close();

    } catch (FileNotFoundException e) {
        System.out.println("File not found.");  
    }

    for (int i = 0 ; i <lines.size(); i++){

        String getlines = lines.get(i);

    }

        System.out.print(lines.get(0)+"\n");

}
4

2 に答える 2

1

次のコードを使用してファイルを読み取ることができます。

    File file = new File("YOUR_FILE_PATH"); 
    try {
        Scanner scanner = new Scanner(file); 

        scanner.nextLine(); // to ignore the first line which has the header

        ArrayList<GraphNode> graphList = new ArrayList<GraphNode>();

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            String[] fields = line.split(" ");

            // Do something with these values
            graphList.add(new GraphNode(Integer.parseInt(fields[0]),
                                        Integer.parseInt(fields[1]),
                                        Integer.parseInt(fields[2]));

        }
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

ファイルを作成するときは、区切り記号を作成するか、例ではヘッダーが で区切られているのに対し、データは で区切られているため、一貫性を保つ必要が,ありspaceます,space

データを保持するための単純なクラスを作成できます。たとえば、次のようになります。

class GraphNode {
    private int start;
    private int end;
    private int cost;

    public GraphNode(int start, int end, int cost) {                
            this.start = start;
            this.end = end;
            this.cost = cost;
    }

    public int getStart() {
            return start;
    }

    public void setStart(int start) {
            this.start = start;
    }

    public int getEnd() {
            return end;
    }

    public void setEnd(int end) {
            this.end = end;
    }

    public int getCost() {
            return cost;
    }

    public void setCost(int cost) {
        this.cost = cost;
    }

}
于 2013-02-17T22:01:32.553 に答える
0

ループを使用して、テキストファイルのデータを(あなたの場合は)ある種の文字列配列/リスト/目的に合ったものに入れます。次に、インデックスfxでそれらを取得できます。彼らと数学をするために。

後で文字列型から数値型に変換する場合は、parseIntegerメソッド(fxおよび整数のみを処理する場合)を使用して、正しいデータ型に変換します。もちろん、floatクラスなどにもparseFloatメソッドがあります。

ファイルを読み取り、データをある種の文字列配列に挿入した後。ループを使用し、解析メソッドを使用して変換することで、適切なデータ型の新しい配列にそれらを配置することをお勧めします。

その後、新しい配列から値を取得し、必要に応じてそれらを使用して計算を行うことができます。

于 2013-02-17T19:01:36.707 に答える