2

ファイルのデータを使用して、任意のサイズのツリーを構築しようとしています。ファイルでは、各ノードが独自の行であり、分岐は特定のキーワードで区切られています。現在、ファイルをリストに読み込んで、アイテムごとに読み込んで、ブランチを構築するためのキーワードを探しています。最初のブランチを開始した後、どのように継続するかを理解するのに苦労しています。以下は、私のツリークラスとテスト入力ファイルです。テスト入力はテストには大きすぎると考えられるかもしれませんが、実際の入力には非常に多くのモデルがあります。最終的な目標は、ツリーがハーレーダビッドソンのバイクのラインナップを表し、各バイクが完全に構築されたときに利用可能なすべてのオプションを表示することです。たとえば、ブランチの 1 つのセクションは次のようになります。

Harley(root) -> Model Line -> Model 1 -> color -> c1

ブランチごとの他のすべてのキーワードについても同様です。私の質問は、私が正しい方向に進んでいるかどうかですpopulate()。私が考えることができる唯一の方法はif...else if...、各キーワードを連続してチェックする大きな構造を持ち、それぞれif...elseにループを設けて、そのキーワードのノードの子を設定することです。たとえそれをしたとしても、次の分岐を行うためにジャンプする方法がわかりません。また、ツリーを作成する方法が非常に非効率的であることもわかっています。何かアドバイス?ありがとうございました。

ツリー.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Tree
{
    private Node root;

    public Tree(String rootData) 
    {
        root = new Node();
        root.data = rootData;
        root.children = new ArrayList<Node>();
    }

    public static class Node
    {
        private String data;
        private Node parent;
        private List<Node> children;

        public Node(){}

        public Node(String newNodeData, Node newNodeParent)
        {
            data = newNodeData;
            parent = newNodeParent;
        }
    }

    public void populate() throws IOException
    {
        //keep track of nodes for jumping up branches quickly
        Node curNode = this.root;
        Node curModelLine;
        Node curModel;

        //get the data
        List<String> fileData = getData();
        int nextDataLine = 0;
        while (!fileData.isEmpty())
        {
            String curLine = fileData.get(nextDataLine);
            if (curLine == "model line")
            {
                curModelLine = new Node(fileData.get(nextDataLine+1), this.root);
                this.root.children.add(curModelLine);    
            }

            /*Not sure where to go from here*/

            nextDataLine++;
        }
    }

    public static List<String> getData() throws IOException
    {
        List<String> filedata = new ArrayList<String>();
        try
        {
            FileInputStream in = new FileInputStream("data.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String line;
            while((line = br.readLine())!= null)
            {
                filedata.add(line);
            }
            br.close();
        }catch(Exception e)
        {
            System.out.println(e);
        }
        return filedata;
    }
}

data.txt:

harley
model line
linename1
modelname1
color
c1
c2
engine size
es1
es2
windsheild
w1
w2
lights
l1
l2
tire size
t1
t2
radio
r1
r2
abs
a1
a2
alarm
a1
a2
seat
s1
s2
bags
b1
b2
modelname2
color
c1
c2
engine size
es1
es2
windsheild
w1
w2
lights
l1
l2
tire size
t1
t2
radio
r1
r2
abs
a1
a2
alarm
a1
a2
seat
s1
s2
bags
b1
b2
linename2
modelname1
color
c1
c2
engine size
es1
es2
windsheild
w1
w2
lights
l1
l2
tire size
t1
t2
radio
r1
r2
abs
a1
a2
alarm
a1
a2
seat
s1
s2
bags
b1
b2
modelname2
color
c1
c2
engine size
es1
es2
windsheild
w1
w2
lights
l1
l2
tire size
t1
t2
radio
r1
r2
abs
a1
a2
alarm
a1
a2
seat
s1
s2
bags
b1
b2
4

1 に答える 1