powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных
106 сообщений из 106, показаны все 5 страниц
Структура данных
    #39687229
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята я написала код структуры данных (иерархия) нужно было создать класс "Tree " с datattpe (string (можно было object добавлять))
с функциями add, remove, search, iterate посмотрите код я правильно написала если нет можете подправить)?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package tree;

import java.util.ArrayList;
import java.util.List;


public class Tree<T> {
     private Node<T> root;

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

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39687253
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд не стоит делать и родительские и дочерние объекты в классе.
Что-то одно.
Но, опять-таки не знаю что вы хотите и может быть вам нужен именно двусвязный список объектов.
...
Рейтинг: 0 / 0
Структура данных
    #39687257
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно сделать по вашему чтобы add remove search iterator был (
...
Рейтинг: 0 / 0
Структура данных
    #39687258
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно сделать по вашему чтобы add remove search iterator был (
...
Рейтинг: 0 / 0
Структура данных
    #39687260
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,
примено вот так да?
Код: java
1.
2.
3.
4.
5.
6.
 public TreeNode<T> addChild(T child) {
        TreeNode<T> childNode = new TreeNode<T>(child);
        childNode.parent = this;
        this.children.add(childNode);
        return childNode;
    }
...
Рейтинг: 0 / 0
Структура данных
    #39687263
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы лучше связывался через родительский элемент, так как он (как мне кажется) создается раньше, чем дочерний.
...
Рейтинг: 0 / 0
Структура данных
    #39687266
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно это сделать? можете написать код пожалуйста)
...
Рейтинг: 0 / 0
Структура данных
    #39687270
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaanastyaa,
примено вот так да?
Код: java
1.
2.
3.
4.
5.
6.
 public TreeNode<T> addChild(T child) {
        TreeNode<T> childNode = new TreeNode<T>(child);
        childNode.parent = this;
        this.children.add(childNode);
        return childNode;
    }


Нет, зачем вам создавать TreeNode<T> childNode = new TreeNode<T>(child);?
Просто добавляйте существующий child в this.children.
Что-то типа
Код: java
1.
2.
3.
 public void addChild(T child) {
        this.children.add(childNode);
    }


Впрочем могу ошибаться :)
...
Рейтинг: 0 / 0
Структура данных
    #39687273
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
вот так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public abstract class Tree<T> implements Iterable<Tree<T>> {

    T data;
    Tree<T> parent;
    List<Tree<T>> children;

    public Tree(T data) {
        this.data = data;
        this.children = new LinkedList<Tree<T>>();
    }

     public void addChild(T child) {
        Tree<T> childNode = null;
        this.children.add(childNode);
    }
    
...
Рейтинг: 0 / 0
Структура данных
    #39687282
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему вы добавляете null объект в коллекцию дочерний, имея существующий child ?
Код: java
1.
2.
3.
4.
     public void addChild(T child) {
        Tree<T> childNode = null;
        this.children.add(childNode);
    }


Почему не так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
     
public void setParent(Tree<T> child) {
        this.parent = child;
}

public void addChild(T child) {
        child.setParent(this);
        this.children.add(child);
    }



Боюсь, что я вас окончательно запутаю :)
...
Рейтинг: 0 / 0
Структура данных
    #39687296
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

ошибка(
...
Рейтинг: 0 / 0
Структура данных
    #39687319
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSQL2008,
ошибка(
Я предупреждал, что могу ошибаться :)
дело в том, что передаваемый тип (T child) не есть объект класса Tree<T> (тут я ошибся, каюсь)
и у него нет метода setParent.

Выход попробовать передавать
Код: java
1.
2.
3.
4.
public void addChild(Tree<T> child) {
        child.setParent(this);
        this.children.add(child);
    }
...
Рейтинг: 0 / 0
Структура данных
    #39687343
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

Спасибо) как можно добавить add, remove, search, iterate я пишу но ошибку выводит
...
Рейтинг: 0 / 0
Структура данных
    #39687344
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
...
Рейтинг: 0 / 0
Структура данных
    #39687506
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

Вот такое решение:

Main.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package tree;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Node node = new Node("name", null, 0L);
        int foundForName = findByName(node, "name").size();
        int foundForName1 = findByName(node, "name1").size();
        System.out.println("found for name - " + foundForName);
        System.out.println("found for name1 - " + foundForName1);

        Tree tree = new Tree("name", null);
        tree.add(node);
        int foundForNameInTree = findByName(tree, "name").size();
        System.out.println("found for name in tree - " + foundForNameInTree);

        Tree tree2 = new Tree("name", null);
        tree2.add(node);
        tree.add(tree2);
        int foundForNameInTree2 = findByName(tree, "name").size();
        System.out.println("found for name in tree 2 - " + foundForNameInTree2);

    }

    public static List<Entry> findByName(final Entry entry, final String name) {
        final List<Entry> result = new ArrayList<Entry>();
        final Queue<Entry> allFiles = new LinkedList<Entry>();
        allFiles.add(entry);
        while (!allFiles.isEmpty()) {
            final Entry localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Entry> files = ((Tree) localEntry).iterate();
                for (final Entry innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}



Entry.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
package tree;

public abstract class Entry {
    private final Tree parent;
    private final long created;
    private String name;
    private long lastUpdated;
    private long lastAccessed;

    public Entry(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
        this.created = System.currentTimeMillis();
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public abstract long size();

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public long getCreationTime() {
        return created;
    }

    public long getLastUpdated() {
        return lastUpdated;
    }

    public long getLastAccessed() {
        return lastAccessed;
    }

    public void setLastUpdated(long lastUpdated) {
        this.lastUpdated = lastUpdated;
    }

    public void setLastAccessed(long lastAccessed) {
        this.lastAccessed = lastAccessed;
    }

    public void changeName(String newName) {
        this.name = newName;
        this.lastUpdated = System.currentTimeMillis();
    }

    public String getName() {
        return name;
    }
}



Node.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package tree;

public class Node extends Entry {
    private final java.io.ByteArrayOutputStream stream;
    private final long size;

    public Node(String name, Tree parent, long size) {
        super(name, parent);
        this.size = size;
        this.stream = new java.io.ByteArrayOutputStream();
    }

    public long size() {
        return size;
    }

    public byte[] getContents() {
        setLastAccessed(System.currentTimeMillis());
        return stream.toByteArray();
    }

    public void setContents(byte[] content) {
        this.stream.write(content, 0, content.length);
        setLastUpdated(System.currentTimeMillis());
    }
}



Tree.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Entry {
    private final List<Entry> contents;

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<Entry>();
    }

    protected List<Entry> iterate() {
        return contents;
    }

    public long size() {
        long size = 0;
        for (final Entry entry : contents) {
            size += entry.size();
        }
        return size;
    }

    public boolean remove(Entry entry) {
        return contents.remove(entry);
    }

    public void add(Entry entry) {
        contents.add(entry);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687522
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Спасибо вам большое)))
Ваше решение похоже на то мне сказали чтобы внутри класса Tree нужно создать class Node и внутри мутить add и тд ??
...
Рейтинг: 0 / 0
Структура данных
    #39687524
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Можете некоторые места закомментировать(( я просто только сегодня познакомилась с Tree и Datatype некоторые места непонятны, если конечно у вас время будет. А так вы мой спаситель люблю вас!!)
...
Рейтинг: 0 / 0
Структура данных
    #39687531
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Можете некоторые места закомментировать(( я просто только сегодня познакомилась с Tree и Datatype некоторые места непонятны, если конечно у вас время будет. А так вы мой спаситель люблю вас!!)

Новая версия:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
Main.java:

package tree;

public class Main {

    public static void main(String[] args) {
        Node node = new Node("name", null, 0L);
        int foundForName = node.findByName("name").size();
        int foundForName1 = node.findByName("name1").size();
        System.out.println("found for name - " + foundForName);
        System.out.println("found for name1 - " + foundForName1);

        Tree tree = new Tree("name", null);
        tree.add(node);
        int foundForNameInTree = tree.findByName("name").size();
        System.out.println("found for name in tree - " + foundForNameInTree);

        Tree tree2 = new Tree("name", null);
        tree2.add(node);
        tree.add(tree2);
        int foundForNameInTree2 = tree.findByName("name").size();
        System.out.println("found for name in tree 2 - " + foundForNameInTree2);

    }
}

Entry.java:

package tree;

import java.util.*;

public abstract class Entry {
    private final Tree parent;
    private String name;

    public Entry(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public abstract long size();

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Entry> findByName(final String name) {
        final List<Entry> result = new ArrayList<Entry>();
        final Queue<Entry> allFiles = new LinkedList<Entry>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Entry localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Entry> files = ((Tree) localEntry).iterate();
                for (final Entry innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}

Node.java:

package tree;

public class Node extends Entry {
    private final java.io.ByteArrayOutputStream stream;
    private final long size;

    public Node(String name, Tree parent, long size) {
        super(name, parent);
        this.size = size;
        this.stream = new java.io.ByteArrayOutputStream();
    }

    public long size() {
        return size;
    }

    public byte[] getContents() {
        return stream.toByteArray();
    }

    public void setContents(byte[] content) {
        this.stream.write(content, 0, content.length);
    }
}

Tree.java:

package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Entry {
    private final List<Entry> contents;

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<Entry>();
    }

    protected List<Entry> iterate() {
        return contents;
    }

    public long size() {
        long size = 0;
        for (final Entry entry : contents) {
            size += entry.size();
        }
        return size;
    }

    public boolean remove(Entry entry) {
        return contents.remove(entry);
    }

    public void add(Entry entry) {
        contents.add(entry);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687807
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

это весь код?)
...
Рейтинг: 0 / 0
Структура данных
    #39687808
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка(
...
Рейтинг: 0 / 0
Структура данных
    #39687809
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в main
(
...
Рейтинг: 0 / 0
Структура данных
    #39687810
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в node(
...
Рейтинг: 0 / 0
Структура данных
    #39687811
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ошибка в tree(
...
Рейтинг: 0 / 0
Структура данных
    #39687812
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

выводит главный класс найти не удалось(
...
Рейтинг: 0 / 0
Структура данных
    #39687821
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Я все решила проблему))
Можно спросить что здесь выводит
Код: java
1.
2.
3.
4.
found for name - 1
found for name1 - 0
found for name in tree - 1
found for name in tree 2 - 2
...
Рейтинг: 0 / 0
Структура данных
    #39687825
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Я все решила проблему))
Можно спросить что здесь выводит
Код: java
1.
2.
3.
4.
found for name - 1
found for name1 - 0
found for name in tree - 1
found for name in tree 2 - 2



Это результат поиска по имени ноды.

Для name сначала находит одну году, потом две.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687829
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Как такую дерево структуры сделать( я только наверное после этого пойму как работает структура данных( можете помочь пожалуйста. Я вот только чуть чуть понимать начала, потом придумала пример и после примера я наверное пойму как это все работает) можете помочь пожалуйста создать такую дерево структуру)
...
Рейтинг: 0 / 0
Структура данных
    #39687838
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Как такую дерево структуры сделать( я только наверное после этого пойму как работает структура данных( можете помочь пожалуйста. Я вот только чуть чуть понимать начала, потом придумала пример и после примера я наверное пойму как это все работает) можете помочь пожалуйста создать такую дерево структуру)

Нужно переименовать Tree в Directory, Node в File. Создать каталоги/файлы и добавить их друг в друга в соответствии со структурой.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687841
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Можете помочь реализовать, просто после этого примера я смогу понять как это все работает, пожалуйста помогите сделать задачу(
...
Рейтинг: 0 / 0
Структура данных
    #39687887
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Можете помочь реализовать, просто после этого примера я смогу понять как это все работает, пожалуйста помогите сделать задачу(

Вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
Main.java

package tree;

public class Main {

    public static void main(String[] args) {
        Directory rootFolder = new Directory("RootFolder", null);
        Directory video = new Directory("Video", null);
        Directory music = new Directory("Music", null);
        Directory picture = new Directory("Picture", null);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        File terminator = new File("Terminator", null);
        File dieHard = new File("Die Hard", null);
        File rocky = new File("Rocky", null);
        File abba = new File("Abba", null);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abba);
        Directory homePicture = new Directory("Home picture", null);
        Directory workPicture = new Directory("Work picture", null);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Abba").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}

Entry.java:

package tree;

import java.util.*;

public abstract class Entry {
    private final Directory parent;
    private String name;

    public Entry(String name, Directory parent) {
        this.name = name;
        this.parent = parent;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public abstract long size();

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Entry> findByName(final String name) {
        final List<Entry> result = new ArrayList<Entry>();
        final Queue<Entry> allFiles = new LinkedList<Entry>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Entry localEntry = allFiles.poll();
            if (localEntry instanceof Directory) {
                final List<Entry> files = ((Directory) localEntry).iterate();
                for (final Entry innerFile : files) {
                    if (innerFile instanceof Directory) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}

File.java:

package tree;

public class File extends Entry {
    private final java.io.ByteArrayOutputStream stream;

    public File(String name, Directory parent) {
        super(name, parent);
        this.stream = new java.io.ByteArrayOutputStream();
    }

    public long size() {
        return stream.size();
    }

    public byte[] getContents() {
        return stream.toByteArray();
    }

    public void setContents(byte[] content) {
        this.stream.write(content, 0, content.length);
    }
}

Directory.java:

package tree;

import java.util.ArrayList;
import java.util.List;

public class Directory extends Entry {
    private final List<Entry> contents;

    public Directory(String name, Directory directory) {
        super(name, directory);
        contents = new ArrayList<Entry>();
    }

    protected List<Entry> iterate() {
        return contents;
    }

    public long size() {
        long size = 0;
        for (final Entry entry : contents) {
            size += entry.size();
        }
        return size;
    }

    public boolean remove(Entry entry) {
        return contents.remove(entry);
    }

    public void add(Entry entry) {
        contents.add(entry);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39687889
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Спасибо большое))) вот теперь поняла как работает все там) спасибо вам большое))))
...
Рейтинг: 0 / 0
Структура данных
    #39687894
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

можно спросить у меня выводит в компиляторе -
found for name in directory - 1

так должно выводить?
...
Рейтинг: 0 / 0
Структура данных
    #39687896
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

можно спросить у меня выводит в компиляторе -
found for name in directory - 1

так должно выводить?

Да, должно выводить found for name in directory - 1.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688002
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Блин( мне сказали что это не дерево, сказали чтобы я создал дерево без файлов и директории( использовав node. Я запуталась((
...
Рейтинг: 0 / 0
Структура данных
    #39688032
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaсоздал деревоопять спалился))
...
Рейтинг: 0 / 0
Структура данных
    #39688049
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

я просто быстро печатаю, и из за этого(
...
Рейтинг: 0 / 0
Структура данных
    #39688050
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

голова кругом гнать начала, запуталась(
...
Рейтинг: 0 / 0
Структура данных
    #39688057
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

плюс я одна в группе среди пацанов, бывает с ними так для прикола общаюсь
...
Рейтинг: 0 / 0
Структура данных
    #39688066
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня с самого начала был вопрос, что же Вы хотите сделать.

обычное бинарное дерево / Tree (только две ветки в узле), B-Tree (оптимизированное для хранение на внешних устройствах, несколько node в одном узле, обычно ограничивают размером блока на внешнем устройстве), сбалансированное B-Tree.....

В общем то, B-Tree достаточно сложная структура, если еще и балансировкой заниматься.

IMHO
...
Рейтинг: 0 / 0
Структура данных
    #39688069
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaплюс я одна в группе среди пацанов, бывает с ними так для прикола общаюсьтогда очень странно - у нас девчонок было было чуть больше, но никто не отказывал им в помощи. мальчики нормальной ориентации?
...
Рейтинг: 0 / 0
Структура данных
    #39688072
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Блин( мне сказали что это не дерево, сказали чтобы я создал дерево без файлов и директории( использовав node. Я запуталась((не понял.
Т.е. дерево это не файловая система, а например сущность Музыкальный альбом?
Тогда в node дерева прописывать классы альбома и в сами классы поле PatchDirectory путь к файлу.
Imho
...
Рейтинг: 0 / 0
Структура данных
    #39688083
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

просто у меня в группе парни каждый сам за себя(
препод ничего не объясняет. Сама где то копаюсь в интернете ищу что то, читаю и так далее. Просто почему я как пацан иногда общаюсь, просто привычка вуза, в группе чтобы быть ближе к пацанам общаюсь на их языке как пацан
...
Рейтинг: 0 / 0
Структура данных
    #39688086
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

мне сказали, что нужно сделать дерево с node, но тот код с директорией и файлами не правильный (сказали похоже, но это не дерево) блин я три дня пытаюсь дерево понять, вроде бы сегодня чуточку поняла но сказали что не правильно, нужно сделать по другому. Хочу дома поделать сама, брат со своими игрой в футбол не дает компьютер
...
Рейтинг: 0 / 0
Структура данных
    #39688087
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,

со своей игрой в футбол(
...
Рейтинг: 0 / 0
Структура данных
    #39688089
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

можете написать код пожалуйста( я честно уже запуталась в край((( от однокурсников толку нету каждый сам за себя((
...
Рейтинг: 0 / 0
Структура данных
    #39688114
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревья бывают разные. А что именно от Вас хочет преподавать, кто же его знает )))

Требуейте нормальную постановку задания или посылайте преподавателя лесом: хочет деревья, пусть идет в лес, там их много.

IMHO

p.s. В свое время, когда этим интересовался, меня отсылали к 3-ему тому Кнута. AFAIK наиболее классическая и авторитетная книжка.
https://www.ozon.ru/context/detail/id/2527036/
...
Рейтинг: 0 / 0
Структура данных
    #39688120
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только при личном общении за кружкой пива
https://yandex.ru/maps/org/what_if/150498964266/

Думаю, после пары литров, как объяснить преподавателю, что он не прав, я Вас научу ))) Ну и заодно какие бывают классические типы деревья, зачем их балансируют и прочее....

p.s. кстате, бармен-девушка, тоже на IT пытается учиться. После 0.5 литров JAWS Атомной прачечной вполне на двоих сообразили, как дроби из 10 в 2 систему переводить )))
Но для деревьев 0.5 явно не хватит )))
...
Рейтинг: 0 / 0
Структура данных
    #39688135
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Я из Ростова) если бы была в Питере то другое дело)
...
Рейтинг: 0 / 0
Структура данных
    #39688144
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaLeonid Kudryavtsev,

Я из Ростова) если бы была в Питере то другое дело)ну вот((.
А раньше Ломоносов...пешком! .....)))
...
Рейтинг: 0 / 0
Структура данных
    #39688145
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://yandex.ru/maps/org/sport_bar_yersh/1699737362/ ?

p.s.
но цены на билеты сейчас запредельные (((
...
Рейтинг: 0 / 0
Структура данных
    #39688149
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Аааа) блин плохо что дядя Валентин Колесников сейчас оффлайн, он бы написал код после этого поняла бы что там до как((
...
Рейтинг: 0 / 0
Структура данных
    #39688157
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

извините там у вас они делятся на файлы и директории, а как сделать так чтобы они равнозначными были((
...
Рейтинг: 0 / 0
Структура данных
    #39688158
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

я спросила у него он сказал, чтобы они были равнозначными нодами, а не делились на директории и файлы
...
Рейтинг: 0 / 0
Структура данных
    #39688249
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

извините там у вас они делятся на файлы и директории, а как сделать так чтобы они равнозначными были((

Вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
Main.java:

package tree;

public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Tree video = new Tree("Video", null);
        Tree music = new Tree("Music", null);
        Tree picture = new Tree("Picture", null);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", null);
        Node dieHard = new Node("Die Hard", null);
        Node rocky = new Node("Rocky", null);
        Node abba = new Node("Abba", null);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abba);
        Tree homePicture = new Tree("Home picture", null);
        Tree workPicture = new Tree("Work picture", null);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Abba").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}

Node.java:

package tree;

import java.util.*;

public class Node {
    private final Tree parent;
    private String name;

    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}

Tree.java:

package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Node {
    private final List<Node> contents;

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<Node>();
    }

    protected List<Node> iterate() {
        return contents;
    }

    public boolean remove(Node node) {
        return contents.remove(node);
    }

    public void add(Node node) {
        contents.add(node);
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688460
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Спасибо вам)))
...
Рейтинг: 0 / 0
Структура данных
    #39688463
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Я поменяла чуток код так как вы сделали четыре дерева, я оставила один RootFOlder, а остальные сделала Noda-ми посмотрите правильный ли код. Я там в одном месте вопрос поставила можете дописать код пожалуйста((
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
package tree;



public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Node video = new Tree("Video", rootFolder);
        Node music = new Tree("Music", rootFolder);
        Node picture = new Tree("Picture", rootFolder);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abby = new Node("Abby", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abby);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Terminator").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}


-----------------

package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Node {
    private Node rootNode;
    

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<>();
    }

    

    public boolean remove(Node node) {
        return contents.remove(node);
    }

    public void add(Node node) {
        contents.add(node);
    }
}
------------

package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;

    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

    public void add(Node node); ??????
    
    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688464
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,

где я поставила вопрос в коде
там будет
Код: java
1.
contents.add(node);

????
...
Рейтинг: 0 / 0
Структура данных
    #39688482
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaanastyaa,

где я поставила вопрос в коде
там будет
Код: java
1.
contents.add(node);

????

Код: java
1.
private final List<Node> contents;



и

Код: java
1.
2.
3.
4.
public void add(Node node) {
        contents.add(node);
    }
}



должны быть внутри Tree.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688489
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

почему у меня код не работает(

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package tree;



public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Node video = new Node("Video", rootFolder);
        Node music = new Node("Music", rootFolder);
        Node picture = new Node("Picture", rootFolder);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abby = new Node("Abby", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abby);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Terminator").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Node {
    private Node rootNode;
    

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<>();
    }

    

    public boolean remove(Node node) {
        return contents.remove(node);
    }

    
    
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;
    public void add(Node node) {
        contents.add(node);
    }

    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

   
    
    
    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688490
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

как можно в class Tree добавить Getroot
...
Рейтинг: 0 / 0
Структура данных
    #39688503
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

как можно в class Tree добавить Getroot

Можно добавить такой метод, он будет искать самую верхнюю ноду у parent.

nastyaa мне тоже нужна помощь.

Конвертор xml в json сможете протестировать у себя?

https://github.com/javadev/underscore-java/releases/download/test/example.jar

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688508
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

как протестировать?
...
Рейтинг: 0 / 0
Структура данных
    #39688509
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

как протестировать?

Запустить у себя и сконвертировать xml в json.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688512
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

я смогу протестировать и помочь вам)
можно я сначала сдам это задание(
можете помочь исправить ошибки(( чтобы код работал

Нужно одно дерево, из за этого я остальные сделала Noda-ми и почему то не работает плюс не смогла написать get
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package tree;



public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Node video = new Node("Video", rootFolder);
        Node music = new Node("Music", rootFolder);
        Node picture = new Node("Picture", rootFolder);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abby = new Node("Abby", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abby);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Terminator").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Node {
    private Node rootNode;
    

    public Tree(String name, Tree tree) {
        super(name, tree);
        contents = new ArrayList<>();
    }

    

    как сюда добавить getRoot

    
    
} 



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;
    
    public void add(Node node) {
        contents.add(node);
    }
    public boolean remove(Node node) {
        return contents.remove(node);
    }
    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

   
    
    
    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688517
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

private final List<Node> contents;


и

public void add(Node node) {
contents.add(node);
}
}


должны быть внутри Tree.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688523
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

мне сказали, чтобы они были в Node(
а в Tree (в дереве) метод getRoot
...
Рейтинг: 0 / 0
Структура данных
    #39688526
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

мне сказали, чтобы они были в Node(
а в Tree (в дереве) метод getRoot

contents = new ArrayList<>();

Можно тогда перенести в конструктор Node.

Метод getRoot напишу, когда доберусь до компьютера.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688532
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

вот так?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;
     
    public Node(String name, Node node) {
        super(name, node);
        contents = new ArrayList<>();
    }
    
    public void add(Node node) {
        contents.add(node);
    }
    public boolean remove(Node node) {
        return contents.remove(node);
    }
    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

   
    
    
    public String getFullPath() {
        if (parent == null) {
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688565
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

Вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Main.java:

package tree;

public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Tree video = new Tree("Video", rootFolder);
        Tree music = new Tree("Music", rootFolder);
        Tree picture = new Tree("Picture", rootFolder);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abba = new Node("Abba", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abba);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        Node rootNode = workPicture.getRoot();
        System.out.println("root node name - " + rootNode.getName());
        // root node name - RootFolder
    }
}



Tree.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package tree;

import java.util.ArrayList;
import java.util.List;

public class Tree extends Node {
...
    public Node getRoot() {
        if (getParent() == null) {
            return null;
        }
        Node parent = getParent();
        while (parent.getParent() != null) {
            parent = parent.getParent();
        }
        return parent;
    }
}



Node.java:

Код: java
1.
2.
3.
4.
5.
6.
7.
public class Node {
...
    protected Node getParent() {
        return parent;
    }
...
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688574
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Извините помните я переделала код сделала одно дерево rootFolder. Как сделать так чтобы video music picture были нодами(
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Main.java:

package tree;

public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);
        Node video = new Tree("Video", rootFolder);
        Node music = new Tree("Music", rootFolder);
        Node picture = new Tree("Picture", rootFolder);
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abba = new Node("Abba", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abba);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        Node rootNode = workPicture.getRoot();
        System.out.println("root node name - " + rootNode.getName());
        // root node name - RootFolder
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688618
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
не подскажите что здесь не правильно
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;
    protected Node getParent() {
        return parent;
     
    public Node(String name, Node node) {
        super(name, node);
        contents = new ArrayList<>();
    }
    
    public void add(Node node) {
        contents.add(node);
    }
    public boolean remove(Node node) {
        return contents.remove(node);
    }
    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

   
    
    
    public String getFullPath() {
        if (parent == null) { 
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39688686
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa, навскидку...

В одном месте у вас parent это Node
Код: java
1.
    private final Node parent;



В другом уже Tree
Код: java
1.
2.
3.
4.
    public Node(String name, Tree parent) {
        this.name = name;
        this.parent = parent;
    }




В третьем коллекция или массив
Код: java
1.
2.
3.
4.
    public boolean delete() {
 ...
        return parent.remove(this);
    }



Извините, каша какая-то
...
Рейтинг: 0 / 0
Структура данных
    #39688688
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

как можно исправить(((
...
Рейтинг: 0 / 0
Структура данных
    #39688690
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSQL2008,

как можно исправить(((
Я бы рад помочь, но занят по работе.
Могу только периодически просматривать и отвечать по мелочи.
Придется вам снова призывать в топик Валентина
...
Рейтинг: 0 / 0
Структура данных
    #39688692
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

Ок))))
...
Рейтинг: 0 / 0
Структура данных
    #39688704
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Извините что я вас достаю((
я написала код но он не правильный к сожалению( мне сказали чтобы класс Tree не наследовался от Node(так как это основное дерево он yt должен быть от кого наследованным, а наоборот все эти ноды должны идти от него . И нужно чтобы одно дерево было rootFolder, а остальные все нодами были( я пыталась сама написать не получилось((
...
Рейтинг: 0 / 0
Структура данных
    #39688712
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Извините что я вас достаю((
я написала код но он не правильный к сожалению( мне сказали чтобы класс Tree не наследовался от Node(так как это основное дерево он yt должен быть от кого наследованным, а наоборот все эти ноды должны идти от него . И нужно чтобы одно дерево было rootFolder, а остальные все нодами были( я пыталась сама написать не получилось((

Можете переименовать Node в Tree а Tree в Node.

Тогда не Tree будет расширять Node а наоборот.

С уважением, Валентин

ЗЫ. Мне бы помощь в тестировании конвертора: 21643425
...
Рейтинг: 0 / 0
Структура данных
    #39688737
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Я вот сейчас пытаюсь протестировать ваш конвертор

Кстати Я поменяла как вы говорили все равно ошибки( можете помочь написать код, я там все перепробывала((
...
Рейтинг: 0 / 0
Структура данных
    #39688751
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,
Я вот сейчас пытаюсь протестировать ваш конвертор

Кстати Я поменяла как вы говорили все равно ошибки( можете помочь написать код, я там все перепробывала((

А как выглядит задание?

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688761
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Та же задача, только там нужно оказывается по другому:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package tree;



public class Main {

    public static void main(String[] args) {
        Tree rootFolder = new Tree("RootFolder", null);----------- только она может быть Tree
        Node video = new Node("Video", rootFolder);------------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было и от него должны идти ноды
         Node music = new Node("Music", rootFolder);---------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было
        Node picture = new Node("Picture", rootFolder);---------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node terminator = new Node("Terminator", video);
        Node dieHard = new Node("Die Hard", video);
        Node rocky = new Node("Rocky", video);
        Node abby = new Node("Abby", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abby);
        Tree homePicture = new Tree("Home picture", picture);
        Tree workPicture = new Tree("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Terminator").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
package tree;


public class Tree extends Node { -------------------------------Tree не должно наследоватся от Node, типа основное дерево ни от кого не должно наследоваться только все ноды должны идти от него. Плюс нужно Get написать

    public Tree(String name, Node node) {
        super(name, node);
    }

    public Node getRoot() {

        if (getParent() == null) {
            return null;
        }
        Node parent = getParent();
        while (parent.getParent() != null) {
            parent = parent.getParent();
        }
        return parent;
    }
}

   

    




Вот здесь у меня ошибок много( нужно много функции здесь прописать в Node типа добавлять, удалять и так далее. Я пыталась сама написать но не получилось

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
package tree;


import java.util.*;

public class Node {
    private final Node parent;
    private String name;
    private final List<Node> contents;
    protected Node getParent() {
        return parent;
     
    
    public Node(String name, Node parent) {
        this.name = name;
        this.parent = parent;
        contents = new ArrayList<>();
    }
        
    
    
    public void add(Node node) {
        contents.add(node);
    }
    public boolean remove(Node node) {
        return contents.remove(node);
    }
    
    protected List<Node> iterate() {
        return contents;
    }

    public boolean delete() {
        if (parent == null) {
            return false;
        }
        return parent.remove(this);
    }

   
    
    
    public String getFullPath() {
        if (parent == null) { 
            return name;
        } else {
            return parent.getFullPath() + "/" + name;
        }
    }

    public void changeName(String newName) {
        this.name = newName;
    }

    public String getName() {
        return name;
    }

    public List<Node> findByName(final String name) {
        final List<Node> result = new ArrayList<Node>();
        final Queue<Node> allFiles = new LinkedList<Node>();
        allFiles.add(this);
        while (!allFiles.isEmpty()) {
            final Node localEntry = allFiles.poll();
            if (localEntry instanceof Tree) {
                final List<Node> files = ((Tree) localEntry).iterate();
                for (final Node innerFile : files) {
                    if (innerFile instanceof Tree) {
                        allFiles.add(innerFile);
                    } else if (innerFile.getName().equals(name)) {
                        result.add(innerFile);
                    }
                }
            } else if (localEntry.getName().equals(name)) {
                result.add(localEntry);
            }
        }
        return result;
    }
}  
...
Рейтинг: 0 / 0
Структура данных
    #39688812
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

можете помочь пожалуйста((
...
Рейтинг: 0 / 0
Структура данных
    #39688820
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

можете помочь пожалуйста((

А какая была изначальная постановка задачи без привязки к коду?

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688823
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

просто сказали сделать дерево, чтобы от rootFolder наследовались остальные с помощью node
...
Рейтинг: 0 / 0
Структура данных
    #39688833
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

просто в вашем годе вы сделали video. pictures. music в виде Tree (получилось 4 дерева Rootfolder,music,video,pictures) а просят чтобы они были Node, только rootFoler был основным в дереве и от него с помощью node соединялись picture music video
...
Рейтинг: 0 / 0
Структура данных
    #39688862
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

просто сказали сделать дерево, чтобы от rootFolder наследовались остальные с помощью node

Это было устное задание? И именно так звучало:

авторсделать дерево, чтобы от rootFolder наследовались остальные с помощью node


С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688865
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

да вот так чтобы одно tree. остальные все node
...
Рейтинг: 0 / 0
Структура данных
    #39688892
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

да вот так чтобы одно tree. остальные все node

Не простая задача. Буду решать вечером. Пока много работы.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39688898
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

ок я буду ждать вас( пока сама попытаюсь
...
Рейтинг: 0 / 0
Структура данных
    #39689044
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

У вас получилось?)
...
Рейтинг: 0 / 0
Структура данных
    #39689078
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

У вас получилось?)

Может все перенести в класс Node?

Как должен создаваться Tree и как он включает в себя Node.

Нужен пример с классами, методы допишем.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39689126
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Блин у меня нетбинс остался на том компьютере где проходят курсы, а утром нужно сдать((
Можете написать как на там листа, пожалуйста я буду очень благодарна:) просто мне сказали что только один Tree был и через него Ноды были.
...
Рейтинг: 0 / 0
Структура данных
    #39689127
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Блин у меня нетбинс остался на том компьютере где проходят курсы, а утром нужно сдать((
Можете написать как на там листа, пожалуйста я буду очень благодарна:) просто мне сказали что только один Tree был и через него Ноды были.
...
Рейтинг: 0 / 0
Структура данных
    #39689128
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Блин у меня нетбинс остался на том компьютере где проходят курсы, а утром нужно сдать((
Можете написать как на там листа, пожалуйста я буду очень благодарна:) просто мне сказали что только один Tree был и через него Ноды были.
...
Рейтинг: 0 / 0
Структура данных
    #39689130
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

Вот такую структуру нашёл:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Tree<T> {
    private Node<T> root;

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

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



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39689190
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Она работает?
...
Рейтинг: 0 / 0
Структура данных
    #39689194
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот же ж не спится людям
...
Рейтинг: 0 / 0
Структура данных
    #39689196
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

мне просто поскорей сдать надо(( вот я не сплю((
...
Рейтинг: 0 / 0
Структура данных
    #39689261
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Я сделала наконец то спасибо что вы все это время помогали мне, ценю вас и люблю)
...
Рейтинг: 0 / 0
Структура данных
    #39689306
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
package tree;

import tree.Tree.Node;

public class Main {

    public static void main(String[] args) {
        Tree<String> rootFolder = new Tree<>("RootFolder"); // ----------- только она может быть Tree
        Node<String> video = new Node<>("Video", rootFolder.getNode()); //------------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было и от него должны идти ноды
        Node<String> music = new Node<>("Music", rootFolder.getNode()); // ---------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было
        Node<String> picture = new Node<>("Picture", rootFolder.getNode()); // ---------- В вашем коде оно Tree, нужно чтобы было Node, чтобы одно дерево было
        rootFolder.add(video);
        rootFolder.add(music);
        rootFolder.add(picture);
        Node<String> terminator = new Node<>("Terminator", video);
        Node<String> dieHard = new Node<>("Die Hard", video);
        Node<String> rocky = new Node<>("Rocky", video);
        Node<String> abby = new Node<>("Abba", music);
        video.add(terminator);
        video.add(dieHard);
        video.add(rocky);
        music.add(abby);
        Node<String> homePicture = new Node<>("Home picture", picture);
        Node<String> workPicture = new Node<>("Work picture", picture);
        picture.add(homePicture);
        picture.add(workPicture);

        int foundForNameInDirectory = rootFolder.findByName("Abba").size();
        System.out.println("found for name in directory - " + foundForNameInDirectory);
        // found for name in directory - 1
        System.out.println("root node name - " + rootFolder.findByName("Abba").get(0).getRoot().getData());
        // root node name - RootFolder
    }
}

package tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Tree<T> {
    private Node<T> root;

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

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

        public Node(T data, Node<T> parent) {
            this.data = data;
            this.parent = parent;
            this.children = new ArrayList<Node<T>>();
        }

        public void add(Node<T> node) {
            children.add(node);
        }

        public T getData() {
            return data;
        }

        public List<Node<T>> iterate() {
            return children;
        }

        public Node<T> getRoot() {
            if (parent == null) {
                return null;
            }
            Node<T> localParent = parent;
            while (localParent.parent != null) {
                localParent = parent.parent;
            }
            return localParent;
        }

    }

    public Node<T> getNode() {
        return root;
    }

    public List<Node<T>> iterate() {
        return root.children;
    }

    public boolean remove(Node<T> node) {
        return root.children.remove(node);
    }

    public void add(Node<T> node) {
        root.children.add(node);
    }

    public List<Node<T>> findByName(final String name) {
        final List<Node<T>> result = new ArrayList<>();
        final Queue<Node<T>> allFiles = new LinkedList<>();
        allFiles.add(getNode());
        while (!allFiles.isEmpty()) {
            final Node<T> localEntry = allFiles.poll();
            final List<Node<T>> files = localEntry.iterate();
            for (final Node<T> innerFile : files) {
                if (innerFile.getData().equals(name)) {
                    result.add(innerFile);
                }
                allFiles.add(innerFile);
            }
        }
        return result;
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39689352
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Я вот сделала правильно же? -
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
package tree;



class Main {

	public static TreeNode<String> getSet1() {
		TreeNode<String> root = new TreeNode<String>("root");
		{
			TreeNode<String> node0 = root.addChild("Video");
                        TreeNode<String> node1 = root.addChild("Music");
                        TreeNode<String> node2 = root.addChild("Pictures");
			{
				
                                
				{
					TreeNode<String> node00 = node0.addChild("Terminator");
                                        TreeNode<String> node01 = node0.addChild("Batman");
                                        TreeNode<String> node02 = node0.addChild("Harry Potter");
                                        TreeNode<String> node03 = node1.addChild("Kendrick Lamar");
                                        TreeNode<String> node04 = node1.addChild("Oxxxymiron");
                                        TreeNode<String> node05 = node1.addChild("Lana Del Rey");
                                        TreeNode<String> node06 = node2.addChild("Comics");
                                        TreeNode<String> node07 = node2.addChild("Mona Lisa");
                                        TreeNode<String> node08 = node2.addChild("Picasso");
                                        
                                        
                                        
                                        
					
				} 
		return root;
	}
                }
        }
}
        



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
package tree;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class TreeNode<T> implements Iterable<TreeNode<T>> {

	public T data;
	public TreeNode<T> parent;
	public List<TreeNode<T>> children;

	public boolean isRoot() {
		return parent == null;
	}

	public boolean isLeaf() {
		return children.size() == 0;
	}

	private List<TreeNode<T>> elementsIndex;

	public TreeNode(T data) {
		this.data = data;
		this.children = new LinkedList<TreeNode<T>>();
		this.elementsIndex = new LinkedList<TreeNode<T>>();
		this.elementsIndex.add(this);
	}

	public TreeNode<T> addChild(T child) {
		TreeNode<T> childNode = new TreeNode<T>(child);		
		this.children.add(childNode);
                
                childNode.parent = this;
                
		//this.registerChildForSearch(childNode);
		return childNode;
	}

	public int getLevel() {
		if (this.isRoot())
			return 0;
		else
			return parent.getLevel() + 1;
	}

	private void registerChildForSearch(TreeNode<T> node) {
		elementsIndex.add(node);
		if (parent != null)
			parent.registerChildForSearch(node);
	}

	public TreeNode<T> findTreeNode(Comparable<T> cmp) {
		for (TreeNode<T> element : this.elementsIndex) {
			T elData = element.data;
			if (cmp.compareTo(elData) == 0)
				return element;
		}

		return null;
	}

	@Override
	public String toString() {
		return data != null ? data.toString() : "[data null]";
	}

	@Override
	public Iterator<TreeNode<T>> iterator() {
		TreeNodeIter<T> iter = new TreeNodeIter<T>(this);
		return iter;
	}

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
package tree;


import java.util.Iterator;

public class TreeNodeIter<T> implements Iterator<TreeNode<T>> {

	enum ProcessStages {
		ProcessParent, ProcessChildCurNode, ProcessChildSubNode
	}

	private TreeNode<T> treeNode;

	public TreeNodeIter(TreeNode<T> treeNode) {
		this.treeNode = treeNode;
		this.doNext = ProcessStages.ProcessParent;
		this.childrenCurNodeIter = treeNode.children.iterator();
	}

	private ProcessStages doNext;
	private TreeNode<T> next;
	private Iterator<TreeNode<T>> childrenCurNodeIter;
	private Iterator<TreeNode<T>> childrenSubNodeIter;

	@Override
	public boolean hasNext() {

		if (this.doNext == ProcessStages.ProcessParent) {
			this.next = this.treeNode;
			this.doNext = ProcessStages.ProcessChildCurNode;
			return true;
		}

		if (this.doNext == ProcessStages.ProcessChildCurNode) {
			if (childrenCurNodeIter.hasNext()) {
				TreeNode<T> childDirect = childrenCurNodeIter.next();
				childrenSubNodeIter = childDirect.iterator();
				this.doNext = ProcessStages.ProcessChildSubNode;
				return hasNext();
			}

			else {
				this.doNext = null;
				return false;
			}
		}
		
		if (this.doNext == ProcessStages.ProcessChildSubNode) {
			if (childrenSubNodeIter.hasNext()) {
				this.next = childrenSubNodeIter.next();
				return true;
			}
			else {
				this.next = null;
				this.doNext = ProcessStages.ProcessChildCurNode;
				return hasNext();
			}
		}

		return false;
	}

	@Override
	public TreeNode<T> next() {
		return this.next;
	}

	@Override
	public void remove() {
		throw new UnsupportedOperationException();
	}

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tree;

class SampleSearching {

	public static void main(String[] args) {
		
		Comparable<String> searchCriteria = new Comparable<String>() {
			@Override
			public int compareTo(String treeData) {
				if (treeData == null)
					return 1;
				boolean nodeOk = treeData.contains("210");
				return nodeOk ? 0 : 1;
			}
		};

		TreeNode<String> treeRoot = Main.getSet1();
		TreeNode<String> found = treeRoot.findTreeNode(searchCriteria);

		System.out.println("Found: " + found);
	}

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tree;

class SampleIterating {

	public static void main(String[] args) {
		TreeNode<String> treeRoot = Main.getSet1();
		for (TreeNode<String> node : treeRoot) {
			String indent = createIndent(node.getLevel());
			System.out.println(indent + node.data);
		}
	}

	private static String createIndent(int depth) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < depth; i++) {
			sb.append(' ');
		}
		return sb.toString();
	}

}
...
Рейтинг: 0 / 0
Структура данных
    #39689354
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Выводит вот так-
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
root
 Video
  Terminator
  Batman
  Harry Potter
 Music
  Kendrick Lamar
  Oxxxymiron
  Lana Del Rey
 Pictures
  Comics
  Mona Lisa
  Picasso
...
Рейтинг: 0 / 0
Структура данных
    #39689364
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Выводит вот так-
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
root
 Video
  Terminator
  Batman
  Harry Potter
 Music
  Kendrick Lamar
  Oxxxymiron
  Lana Del Rey
 Pictures
  Comics
  Mona Lisa
  Picasso



Решение хорошее, только сложное в понимании кода.

С уважением, Валентин
...
Рейтинг: 0 / 0
Структура данных
    #39689413
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
не подскажите как этот код запустить в main?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package tree;

class SampleSearching {

	public static void main(String[] args) {
		
		Comparable<String> searchCriteria = new Comparable<String>() {
			@Override
			public int compareTo(String treeData) {
				if (treeData == null)
					return 1;
				boolean nodeOk = treeData.contains("node01");
				return nodeOk ? 0 : 1;
			}
		};

		TreeNode<String> treeRoot = Main.getSet1();
		TreeNode<String> found = treeRoot.findTreeNode(searchCriteria);

		System.out.println("Found: " + found);
	}

}
...
Рейтинг: 0 / 0
Структура данных
    #39689429
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
package tree;

class Main {

    public static void main(String[] args) {
        TreeNode<String> treeRoot = getSet1();
        
        printTree(treeRoot);
        
        /*for (TreeNode<String> node : treeRoot) {
            String indent = createIndent(node.getLevel());
            System.out.println(indent + node.data);
        }*/
    }

    public static void printTree(TreeNode<String> tree) {

??????????????????????????????????????????????????????????????- как здесь написать рекурсию чтобы все элементы дерева вывело на экран
        
    }
    
    private static String createIndent(int depth) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            sb.append(' ');
        }
        return sb.toString();
    }

    public static TreeNode<String> getSet1() {
        TreeNode<String> root = new TreeNode<>("root");

        TreeNode<String> node0 = root.addChild("Video");
        TreeNode<String> node1 = root.addChild("Music");
        TreeNode<String> node2 = root.addChild("Pictures");

        TreeNode<String> node00 = node0.addChild("Terminator");
        TreeNode<String> node01 = node0.addChild("Batman");
        TreeNode<String> node02 = node0.addChild("Harry Potter");
        TreeNode<String> node03 = node1.addChild("Kendrick Lamar");
        TreeNode<String> node04 = node1.addChild("Oxxxymiron");
        TreeNode<String> node05 = node1.addChild("Lana Del Rey");
        TreeNode<String> node06 = node2.addChild("Comics");
        TreeNode<String> node07 = node2.addChild("Mona Lisa");
        TreeNode<String> node08 = node2.addChild("Picasso");
        
        
        TreeNode<String> node09 = node08.addChild("Picasso1");
        TreeNode<String> node10 = node08.addChild("Picasso2");

        return root;

    }
}
...
Рейтинг: 0 / 0
Структура данных
    #39689663
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Пожалуйста помогите написать рекурсию(
...
Рейтинг: 0 / 0
Структура данных
    #39689845
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

сможете помочь? вы моя последняя надежда(
...
Рейтинг: 0 / 0
106 сообщений из 106, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]