Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных / 25 сообщений из 106, страница 1 из 5
14.08.2018, 08:43
    #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
14.08.2018, 09:31
    #39687253
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
На мой взгляд не стоит делать и родительские и дочерние объекты в классе.
Что-то одно.
Но, опять-таки не знаю что вы хотите и может быть вам нужен именно двусвязный список объектов.
...
Рейтинг: 0 / 0
14.08.2018, 09:33
    #39687257
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
SQL2008,

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

как можно сделать по вашему чтобы add remove search iterator был (
...
Рейтинг: 0 / 0
14.08.2018, 09:41
    #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
14.08.2018, 09:45
    #39687263
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
Я бы лучше связывался через родительский элемент, так как он (как мне кажется) создается раньше, чем дочерний.
...
Рейтинг: 0 / 0
14.08.2018, 09:46
    #39687266
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
SQL2008,

как можно это сделать? можете написать код пожалуйста)
...
Рейтинг: 0 / 0
14.08.2018, 09:51
    #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
14.08.2018, 09:53
    #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
14.08.2018, 10:04
    #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
14.08.2018, 10:23
    #39687296
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
SQL2008,

ошибка(
...
Рейтинг: 0 / 0
14.08.2018, 10:54
    #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
14.08.2018, 11:15
    #39687343
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
SQL2008,

Спасибо) как можно добавить add, remove, search, iterate я пишу но ошибку выводит
...
Рейтинг: 0 / 0
14.08.2018, 11:16
    #39687344
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
SQL2008,
...
Рейтинг: 0 / 0
14.08.2018, 14:23
    #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
14.08.2018, 14:41
    #39687522
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
Valentin Kolesnikov,

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

Можете некоторые места закомментировать(( я просто только сегодня познакомилась с Tree и Datatype некоторые места непонятны, если конечно у вас время будет. А так вы мой спаситель люблю вас!!)
...
Рейтинг: 0 / 0
14.08.2018, 14:58
    #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
15.08.2018, 06:08
    #39687807
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура данных
Valentin Kolesnikov,

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

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

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

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

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

выводит главный класс найти не удалось(
...
Рейтинг: 0 / 0
15.08.2018, 07:42
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Структура данных / 25 сообщений из 106, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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