Я пытаюсь построить дерево произвольного размера, используя данные из файла. В файле каждый узел — это отдельная строка, а ветки разграничиваются определенными ключевыми словами. В настоящее время я читаю файл в список, читаю его поэлементно и ищу ключевые слова для построения ветвей. Мне трудно понять, как продолжать работу после запуска первой ветки. Ниже приведен мой класс дерева и тестовый входной файл. Я понимаю, что тестовые входные данные могут считаться слишком большими для теста, но на самом деле будет много-много моделей. Конечная цель — сделать так, чтобы дерево представляло линейку мотоциклов Harley Davidson со всеми доступными опциями для каждого мотоцикла после его полной сборки. Например, один раздел ветки будет выглядеть так:
Harley(root) -> Model Line -> Model 1 -> color -> c1
И так далее для всех остальных ключевых слов в каждой ветке. Мой вопрос будет заключаться в том, иду ли я в правильном направлении в populate(). Единственный способ, которым я могу это сделать, - это иметь большую структуру if...else if... для последовательной проверки каждого ключевого слова с циклом в каждом if...else для заполнения дочерних элементов узла этого ключевого слова. Даже если бы я сделал это, я не знаю, как подпрыгнуть, чтобы сделать следующую ветку, и знаю, что это ужасно неэффективный способ создания дерева. Есть совет? Спасибо.
Tree.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();
}
public static class Node
{
private String data;
private Node parent;
private List 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 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 getData() throws IOException
{
List filedata = new ArrayList();
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
Подробнее здесь: https://stackoverflow.com/questions/158 ... -text-file
Построение дерева в Java с использованием входных данных из текстового файла ⇐ JAVA
Программисты JAVA общаются здесь
1728936490
Anonymous
Я пытаюсь построить дерево произвольного размера, используя данные из файла. В файле каждый узел — это отдельная строка, а ветки разграничиваются определенными ключевыми словами. В настоящее время я читаю файл в список, читаю его поэлементно и ищу ключевые слова для построения ветвей. Мне трудно понять, как продолжать работу после запуска первой ветки. Ниже приведен мой класс дерева и тестовый входной файл. Я понимаю, что тестовые входные данные могут считаться слишком большими для теста, но на самом деле будет много-много моделей. Конечная цель — сделать так, чтобы дерево представляло линейку мотоциклов Harley Davidson со всеми доступными опциями для каждого мотоцикла после его полной сборки. Например, один раздел ветки будет выглядеть так:
Harley(root) -> Model Line -> Model 1 -> color -> c1
И так далее для всех остальных ключевых слов в каждой ветке. Мой вопрос будет заключаться в том, иду ли я в правильном направлении в populate(). Единственный способ, которым я могу это сделать, - это иметь большую структуру if...else if... для последовательной проверки каждого ключевого слова с циклом в каждом if...else для заполнения дочерних элементов узла этого ключевого слова. Даже если бы я сделал это, я не знаю, как подпрыгнуть, чтобы сделать следующую ветку, и знаю, что это ужасно неэффективный способ создания дерева. Есть совет? Спасибо.
Tree.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();
}
public static class Node
{
private String data;
private Node parent;
private List 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 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 getData() throws IOException
{
List filedata = new ArrayList();
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
Подробнее здесь: [url]https://stackoverflow.com/questions/15865522/building-a-tree-in-java-using-input-from-a-text-file[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия