0
ツリー構造の実装には助けが必要ですが、ツリーにデータを追加する追加子機能を作成しましたが、子を追加する際に問題があるようです。Javaのツリー構造へのtxtファイルの読み込み
私は木が見えるようにしたいもの:
Date
/ | \
/ | \
/ | \
/ | \
20160101 20160102 20160103
/ | | \
12:00 13:00 12:00 13:00
/ \ / \ | / \
Here There Here There Here Here There
例のtxtファイル:
Date,Time,Location 20160101,12:00,Here 20160101,12:00,There 20160102,13:00,Here 20160102,13:00,There 20160103,12:00, Here 20160103,13:00, Here 20160103,13:00, There日付の出力は罰金だ
が、それは2つの日付を示し
私はしたくないので、同じ日付が2回表示されますが、時間と場所が間違っています。は、予想される:
20160101 12:00 Here There 20160102 13:00 Here There 20160103 12:00 Here 13:00 Here There
ACTUAL:
20160101 12:00 Here There 13:00 Here There 20160102 12:00 Here There 13:00 Here There 20160103 12:00 Here There 13:00 Here There
私は私のコードの任意のヘルプやフィードバックを感謝しています。
public class Tree {
List<Tree> children = new ArrayList<Tree>();
Tree parent = null;
String data = null;
public Tree(String data) {
this.data = data;
}
public Tree(String data, Tree parent){
this.data = data;
this.parent = parent;
}
public void addChild(String data) {
Tree child = new Tree(data);
child.parent = this;
Boolean match = false;
for (int i = 0; i < this.children.size(); i++) {
if (this.children.get(i).data.equals(child.data)) {
match = true;
break;
}
}
if (!match) {
this.children.add(child);
}
}
public void addChild(Tree child) {
Boolean match = false;
for (int i = 0; i < this.children.size(); i++) {
if (this.children.get(i).data.equals(child.data)) {
match = true;
break;
}
}
if (!match) {
this.children.add(child);
}
}
public static void main(String[] args) throws IOException {
long startTime = System.nanoTime();
Scanner scanFile = new Scanner(new File("example.txt"));
String line = "";
line = scanFile.nextLine();
Tree parentNode = new Tree(line.split(",")[0]);
Tree dateNode = new Tree(null, parentNode);
Tree timeNode = new Tree(null, dateNode);
Tree locationNode = new Tree(null, timeNode);
System.out.println(parentNode.data);
while(scanFile.hasNext()) {
line = scanFile.nextLine();
timeNode.addChild(line.split(",")[2]);
dateNode.addChild(line.split(",")[1]);
parentNode.addChild(line.split(",")[0]);
}
scanFile.close();
for(int i =0; i < parentNode.children.size(); i++) {
System.out.println(parentNode.children.get(i).data);
for(int j = 0; j < dateNode.children.size(); j++) {
System.out.println(dateNode.children.get(j).data);
for(int k = 0; k < timeNode.children.size(); k++) {
System.out.println(timeNode.children.get(k).data);
}
}
long endTime = System.nanoTime();
System.out.println("Time taken: " + (endTime - startTime)/1E9 + "s");
}
}
することになって、あなたの木のロジックとは何ですか?あなたの印刷は、 'parentNode'の各要素に対して' dateNode'と 'timeNode'から同じデータを繰り返し印刷します。 – RealSkeptic
'timeNode'のすべての子データと' parentNode'の各要素の 'dateNode'のすべての子データを出力することになっています。問題は' dateNode.children'のサイズです。 'timeNode.children'は1だけです – phat
もう一度問題は、ツリー構造が意味をなさない(あなたが構築するはずのツリーを説明していない)こと、そして印刷が間違っていることです。スキャンを終了した後は、 'timeNode'と' dateNode'に何も割り当てられていないので、スキャンした最後の値が保持されます。あなたは質問を編集し、木の葉の論理を説明してください。デバッガを使用してプログラムを段階的に実行し、ノードに実際に含まれていることを確認できるようにすることが重要です。 – RealSkeptic