powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему у меня выводит ошибку
156 сообщений из 156, показаны все 7 страниц
Почему у меня выводит ошибку
    #39691459
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.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;


public class TreePrint {
	
    public static void main(String[] args) {
        
        Tree<String> rootFolder = new Tree<>("RootFolder"); 
        
        Node<String> video = new Node<>("Video"); 
        
        Node<String> music = new Node<>("Music"); 
        Node<String> picture = new Node<>("Picture");
        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);
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691497
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa, текст ошибки вы, разумеется, нам не скажете?
Должна же быть в женщине какая-то загадка.


На беглый взгляд мне не нравится
Код: java
1.
Tree<String> rootFolder = new Tree<>("RootFolder"); 


может должно быть как-то так
Код: java
1.
Tree<String> rootFolder = new Tree<String>("RootFolder"); 
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691501
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

У меня ошибку выводит начиная с add не знаете почему?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691502
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
вот мой класс Node с add
Код: 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.
/*
 * 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;

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

public class Node<T> {

    private T data = null;
    private List<Node<T>> children = new ArrayList<>();
    private Node parent = null;

    public Node(T data) {
        this.data = data;
    }

    public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }
   
    
     public void remove(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.remove(node);
     }

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

    public Node getParent() {
        return parent;
    }

    
    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691622
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стесняюсь спросить... а где вы тут метод add увидели?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691626
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открою страшную тайну... Если вы нажмете ALT+ВВОД, то вам будут предложены варианты рещения проблемы.
Например создать недостающий метод в указанном классе.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691635
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

Код: 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.
/*
 * 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;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;


public class TreePrint {
	
    public static void main(String[] args) {
        
        Tree<String> rootFolder = new Tree<>("RootFolder"); 
        
        Node<String> video = new Node<>("Video"); 
        Node<String> music = new Node<>("Music"); 
        Node<String> picture = new Node<>("Picture");
        
        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        picture.addChild("Picasso");
        
        
        
    }
    
        
        
    

    private static <T> void printCatalog() {

        printNode(rootFolder.getRoot()); // Вот здесь ругается
        List<Node<T>> kids = rootFolder.iterate(); // Вот здесь ругается
        printTree(kids);

    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }

    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }

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

вообще я правильно написала?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39691657
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,
почему выводит пустоту?
Код: 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.
/*
 * 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;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;


public class TreePrint {
	
    public static void main(String[] args) {
        
        Tree<String> rootFolder = new Tree<>("RootFolder"); 
        
        Node<String> video = new Node<>("Video"); 
        Node<String> music = new Node<>("Music"); 
        Node<String> picture = new Node<>("Picture");
        
        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        picture.addChild("Picasso");
        
        printCatalog(rootFolder);
        
    }
    
    private static <T> void printCatalog(Tree<T> rootFolder) {
        
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);

    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }

    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }

}



Код: 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;

import java.util.List;

class Tree<T> {

    private Node<T> root = null;
    
    public Tree(T data) {
        root = new Node(data);
    }
    
    public Node getRoot() {
        return root;
    }

    <T> List<Node<T>> iterate() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
	



Код: 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.
/*
 * 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;

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

public class Node<T> {

    private T data = null;
    private List<Node<T>> children = new ArrayList<>();
    private Node parent = null;

    public Node(T data) {
        this.data = data;
    }

    public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }
    public List<Node<T>> iterate() {
            return children;
        }
    
    
     public void remove(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.remove(node);
     }

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

    public Node getParent() {
        return parent;
    }

    
    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

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

Вечером посмотрю.

Можете протестировать новую версию моей программы:

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

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

Вечером посмотрю.

Можете протестировать новую версию моей программы:

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

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

Вечером посмотрю.

Можете протестировать новую версию моей программы:

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

С уважением, Валентин
После всего этого, Валентин, вы, как порядочный человек обязаны... ну вы понимаете :)

Я уже женат.

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

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

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

Буду доделывать программу вечером.

А мой конвертор получилось протестировать?

Появился чек лист 21651722

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692415
Фотография 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.
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.
package tree;

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

public class Node<T> {

    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

package tree;

import java.util.List;

class Tree<T> {

    private final Node<T> root;

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

    public Node getRoot() {
        return root;
    }

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

package tree;

import java.util.List;

public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = new Node<>("Video", rootFolder.getRoot());
        Node<String> music = new Node<>("Music", rootFolder.getRoot());
        Node<String> picture = new Node<>("Picture", rootFolder.getRoot());
        rootFolder.getRoot().addChild(video);
        rootFolder.getRoot().addChild(music);
        rootFolder.getRoot().addChild(picture);

        video.addChild(new Node<>("Terminator", video));
        video.addChild(new Node<>("Die Hard", video));
        video.addChild(new Node<>("Rocky", video));
        music.addChild(new Node<>("Eminem", music));
        picture.addChild(new Node<>("Picasso", picture));

        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }
}



У меня выводит:
авторRootFolder
Video
Terminator
Die Hard
Rocky
Music
Eminem
Picture
Picasso


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

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

Спасибо вам большое))
а как сделать так чтобы от Терминатора и Пикассо тоже узлы пошли

Для new Node<>("Terminator", video) и new Node<>("Picasso", picture) создаёте отдельные переменные и к ним добавляете узлы.

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

Код: java
1.
2.
3.
Node<String> video = new Node<>("Video", rootFolder.getRoot()); 
        Node<String> music = new Node<>("Music", rootFolder.getRoot());
        Node<String> picture = new Node<>("Picture", rootFolder.getRoot());



node создавать не с помощью new.
Addchild должен возвращать узел,
Плюс video, music должны добавлять с помощью addChild
Можете исправить пожалуйста((( я сейчас сама попытаюсь
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692449
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

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

Плюс сказали что здесь
Код: java
1.
("Video", rootFolder.getRoot());

и в других он говорит что нужно передавать один параметр а не два(
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692476
Фотография 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.
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.
package tree;

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

public class Node<T> {

    private T data;
    private final List<Node<T>> children = new ArrayList<>();

    public Node(T data) {
        this.data = data;
    }

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

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

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

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

package tree;

import java.util.List;

class Tree<T> {

    private final Node<T> root;

    public Tree(T data) {
        root = new Node<T>(data);
    }

    public Node getRoot() {
        return root;
    }

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

package tree;

import java.util.List;

public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
        rootFolder.getRoot().addChild(video);
        rootFolder.getRoot().addChild(music);
        rootFolder.getRoot().addChild(picture);

        video.addChild(new Node<>("Terminator"));
        video.addChild(new Node<>("Die Hard"));
        video.addChild(new Node<>("Rocky"));
        music.addChild(new Node<>("Eminem"));
        picture.addChild(new Node<>("Picasso"));

        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }
}



ЗЫ. Мне бы конвертор протестировать.

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

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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
        rootFolder.getRoot().addChild(video);
        rootFolder.getRoot().addChild(music);
        rootFolder.getRoot().addChild(picture);

        video.addChild(new Node<>("Terminator"));
        video.addChild(new Node<>("Die Hard"));
        video.addChild(new Node<>("Rocky"));
        music.addChild(new Node<>("Eminem"));
        picture.addChild(new Node<>("Picasso"));



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

Я тестировала пока нормально все)
кстати как teminator добавить узлы?

Пришлите табличку с тестируемым файлами пожалуйста.

Для терминатора создаёте переменную и добавляете к ней узлы.

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692737
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaкстати как teminator добавить узлы?

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

Кстати как через Addchild передавать Data я там вопрос поставила в коде(просто он сказал что изначально там Data стояла и надо через него) и как его запустить? можете помочь?


Код: 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.
/*

import java.util.ArrayList;

import java.util.List;


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

public class Node<T> {

    private T data;
    private final List<Node<T>> children = new ArrayList<>();

    public Node(T data) {
        this.data = data;
    }

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

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

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

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}



Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
        
        rootNode.addChild(video);
        rootNode.addChild(music);
        rootNode.addChild(picture);

        video.addChild(new Node<>("Terminator"));
        video.addChild(new Node<>("Die Hard"));
        video.addChild(new Node<>("Rocky"));
        music.addChild(new Node<>("Eminem"));
        picture.addChild(new Node<>("Picasso"));
        
        
        
        Tree<String> rootFolder1 = new Tree<>("RootFolder1");
        
        
        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

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

Кстати как через Addchild передавать Data я там вопрос поставила в коде(просто он сказал что изначально там Data стояла и надо через него) и как его запустить? можете помочь?


Код: 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.
/*

import java.util.ArrayList;

import java.util.List;


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

public class Node<T> {

    private T data;
    private final List<Node<T>> children = new ArrayList<>();

    public Node(T data) {
        this.data = data;
    }

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

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

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

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}



Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
        
        rootNode.addChild(video);
        rootNode.addChild(music);
        rootNode.addChild(picture);

        video.addChild(new Node<>("Terminator"));
        video.addChild(new Node<>("Die Hard"));
        video.addChild(new Node<>("Rocky"));
        music.addChild(new Node<>("Eminem"));
        picture.addChild(new Node<>("Picasso"));
        
        
        
        Tree<String> rootFolder1 = new Tree<>("RootFolder1");
        
        
        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }
}



Мне бы файлы в текстом виде, лучше в табличке, скрины не надо.

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

да я вечером скину вам в текстовом в виде этот форум)

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

да я вечером скину вам в текстовом в виде этот форум)

У вас получилось с датой сделать Addchild и запустить?(

public Node<T> addChild(T data) {

Странный метод. Если вам нужно создать ноду из даты лучше днбавьте Статик метод create внутри Node.

Кто Вас просит такой метод.длбавить?

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692746
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Помните в начале у меня вот такой AddChild написан был он хочет чтобы я еще его добавил, и запустил вместе с вашим кодом
Код: java
1.
2.
3.
4.
5.
   public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692747
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,
Помните в начале у меня вот такой AddChild написан был он хочет чтобы я еще его добавил, и запустил вместе с вашим кодом
Код: java
1.
2.
3.
4.
5.
   public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }



Очень странный метод. Если для того чтобы понравиться преподавателю, то ок. А так - я бы такой метод не добавлял.

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

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

Можете пожалуйста помочь? и как его запустить в treeprint

Странный метод. Нельзя создавать сущности внутри add().

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

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

Вообще никак? с data?

Это нарушает The Single Responsibility Principle

https://ru.m.wikipedia.org/wiki/SOLID_(объектно-ориентированное_программирование)

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692757
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Получается этот метод не правильный?
Код: java
1.
2.
3.
4.
5.
public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692760
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,
Получается этот метод не правильный?
Код: java
1.
2.
3.
4.
5.
public void addChild(T data) {
        Node<T> node = new Node<>(data);        
        node.parent = this;
        children.add(node);
    }



Нет, неправильный.

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

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

а нельзя написать метод, который хоть как то будет создавать addchild с data

Можно внутри Node добавить статик метод create.

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692764
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
public void addChild(Node<T> node) {
        children.add(node);
    }



Так правильно добавлять node.

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

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

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

блин((( мне сказали что только с data будет правильно, остальное не примут((

Для преподавателя можно написать как он хочет.

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

можете попробовать написать?

Мне тоже нужна помощь в тестировании.

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

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

Код: java
1.
2.
3.
public Node<T> addChild(T data) {
вот такой метод??
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692909
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

вот так правильно?
Код: java
1.
2.
3.
4.
 public Node<T> addChild(T data) {   
        addChild(new Node<>(data));
        return null;
    }
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692941
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

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

кстати почему в вашем коде который вы написали отсутствует parent? мне сказали чтобы он был
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692950
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaкак сделать так чтобы он ссылался на родителя?

и в чем проблема?

В классе node добавьте метод setParent
+
Код: java
1.
2.
3.
4.
5.
6.
7.
 public Node<T> addChild(T data) {   
        Node<T> newNode;
        newNode = new Node<T>(data);
        newNode.setParent( this );
        addChild( newNode );
        return newNode;
    }



P.S. когда я учился программированию (1991-92), мне говорили, что в нормальной программе 2/3 должны занимать комментарии и 1/3 собственно код.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692952
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevP.S. когда я учился программированию (1991-92), мне говорили, что в нормальной программе 2/3 должны занимать комментарии и 1/3 собственно код.комментировать это хорошо, но надо не просто набирать эти 2/3 ...
я в своё время рефакторил код на аксе,там комментов было строк 10 не несколько тысяч строк кода.
мне бы хватило и этих 10, если б они были в нужном месте и имели нормальное содержание.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692962
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

валентин сделал код без parent, я его добавил почему он не запускается?

Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

         
        
        Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = new Node<>("Video");
        Node<String> music = new Node<>("Music");
        Node<String> picture = new Node<>("Picture");
        
        rootNode.addChild(video);
        rootNode.addChild(music);
        rootNode.addChild(picture);

        video.addChild(new Node<>("Terminator"));
        video.addChild(new Node<>("Die Hard"));
        video.addChild(new Node<>("Rocky"));
        music.addChild(new Node<>("Eminem"));
        picture.addChild(new Node<>("Picasso"));
        
        
        
        Tree<String> rootFolder = new Tree<>("RootFolder1");
        
        
        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode(rootFolder.getRoot());
        List<Node<T>> kids = rootFolder.iterate();
        printTree(kids);
    }

    private static <T> void printTree(List<Node<T>> kids) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid);
            printTree(kid.getChildren());
        }
    }

    private static <T> void printNode(Node<T> kid) {
        System.out.println(kid.getData());

    }
}

--------------------------------
class Tree<T> {

    private final Node<T> root;

    public Tree(T data) {
        root = new Node<>(data);
    }

    public Node getRoot() {
        return root;
    }

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

------------------------------
import java.util.ArrayList;

import java.util.List;


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


public class Node<T> {

    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692964
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

точнее добавила) из за того что вокруг одни мальчики уже общаюсь как мальчик((
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692980
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLeonid KudryavtsevP.S. когда я учился программированию (1991-92), мне говорили, что в нормальной программе 2/3 должны занимать комментарии и 1/3 собственно код.комментировать это хорошо, но надо не просто набирать эти 2/3 ...
я в своё время рефакторил код на аксе,там комментов было строк 10 не несколько тысяч строк кода.
мне бы хватило и этих 10, если б они были в нужном месте и имели нормальное содержание.
Просто, перед тем как кодировать, хорошо бы понять, что же ты хочешь закодировать

Сейчас, я в принципе, это себе и так представляю.... Для новичка, хорошо бы сначала описать русским языком, что и зачем он хочет сделать, а уже потом начинать кодировать.

Пример:
Метод addChild должен что-то возвращать... что, зачем?
nastyaa, почему-то, возвращает null.... почему?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692981
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

просто мне сказали сделать обычное дерево. Я ему показал 3-4 вида кода он сказал не подходит. В общем нужно сделать addchild с data как в моем коде и запустить его. Просто мой последний отправленный код не могу запустить, как можно его запустить
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692983
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

код который отправил Валентин(спасибо что написал) там addchild был без data. Плюс там не было parent. А мне нужно чтобы addchild был с data и был parent. Я вроде написала все правильно, только addchild с data кажется не правильно написаны, и не могу его запустить
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692986
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa
Код: java
1.
        Node<String> video = new Node<>("Video");



А уж конечно извеняюсь, но у меня, разумеется, он тоже не запускается.
Только ошибка компилятора:

The constructor Node<String>(String) is undefined

назвать НЕ запускается очень сложно. Он даже НЕ КОМПИЛИРУЕТСЯ.

аналогично:

Код: java
1.
        root = new Node<>(data);



Cannot infer type arguments for Node<>
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39692987
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

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

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

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

Исходный код

Код: 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.
import java.util.ArrayList;
import java.util.List;

public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

    /**
     * 
     * Создает новый узел
     * 
     * @param data Данные для нового узла
     * @param parent Ссылка на родителя данного узла
     * 
    */
    public Node(T data, Node<T> parent) {
        this.data = data;
        this.parent = parent;
    }

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

    /**
     * Создает узел и добавляет его в иерархию на основе его данных.
     * 
     * @param nodeData Данные для нового узла
     * @return Возвращает вновь созданный узел
     */
    public Node<T> addChild(T nodeData) {
    	// Создаваемый узел будет принадлежать нашему. Т.ч. его
    	// parent - это мы
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

    /**
     * Специальный метод, что бы всех разбирающихся в структурах
     * данных доводить до иступления.
     * Все знаю, что метод iterate должен возвращать интератор, а
     * не коллекцию. Если итератора нет, то и нафиг такой метод.
     * 
     * НО ! Если его не будет, тогда у всех будет душевное спокойствие,
     * что не интересно. Поэтому данный метод необходим, как увеличивающий
     * продажи психотропных и успокоительных лекарств, соответственно
     * стимулирующий рост экономики в сфере фарм-индустрии и соответственно
     * увеличивающий рост ВВП России. Слава Путину !!!
    */
    public List<Node<T>> iterate() {
        return children;
    }

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}


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

/**
 * Класс дерево.
 * 
 * Является вырожденным случаем класса Node без указания parent'а. 
 * 
 * @author 
 *
 * @param <T>
 */
public class Tree<T> extends Node<T> {
    public Tree(T data) {
    	/* У корневого узла parent'а нет и быть не может */
    	super( data, null );
    }
}



Код: 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.
package test_jvm;

import java.util.List;

public class TreePrint {
    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        // Даром не нужно Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = rootFolder.addChild( "Video" );
        Node<String> music = rootFolder.addChild( "Music" );
        Node<String> picture = rootFolder.addChild( "Picture" );

        video.addChild( "Terminator" );
        video.addChild( "Die Hard" );
        video.addChild( "Rocky" );
        music.addChild( "Eminem" );
        picture.addChild( "Picasso" );

        printCatalog(rootFolder);

    }

    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode( rootFolder, 0 );
        List<Node<T>> kids = rootFolder.getChildren();
        printTree(kids, 1 );
    }

    private static <T> void printTree(List<Node<T>> kids, int level ) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid, level );
            printTree(kid.getChildren(), level+1 );
        }
    }

    /**
     * Печатает узел с отступом.
     * 
     * @param kid Узел, который нужно напечатать
     * @param level Положение в иерархии, для генерации красивого отступа
     */
    private static <T> void printNode(Node<T> kid, int level ) {
    	// Печатаем отступ (без перевода строки)
    	for ( int i=0; i<level; i++ ) {
    		System.out.print( "  " );
    	}
        // Печатаем данные и переводим строку
        System.out.println(kid.getData());
    }
}




Результат работы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
RootFolder
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693003
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Спасибо вам за код я очень вам благодарна) но как сделать так чтобы tree не наследовался от node. Помню у меня был код там сказали, чтобы tree не наследовался от node.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693019
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не хотете просто класс PrintTree переназвать в Tree ?
(при копи-пасте на форум отступы уехали ((( )

Код: 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.
import java.util.ArrayList;
import java.util.List;

public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

    /**
     * 
     * Создает новый узел
     * 
     * @param data Данные для нового узла
     * @param parent Ссылка на родителя данного узла
     * 
    */
    public Node(T data, Node<T> parent) {
        this.data = data;
        this.parent = parent;
    }

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

    /**
     * Создает узел и добавляет его в иерархию на основе его данных.
     * 
     * @param nodeData Данные для нового узла
     * @return Возвращает вновь созданный узел
     */
    public Node<T> addChild(T nodeData) {
    	// Создаваемый узел будет принадлежать нашему. Т.ч. его
    	// parent - это мы
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

    /**
     * Специальный метод, что бы всех разбирающихся в структурах
     * данных доводить до иступления.
     * Все знаю, что метод iterate должен возвращать интератор, а
     * не коллекцию. Если итератора нет, то и нафиг такой метод.
     * 
     * НО ! Если его не будет, тогда у всех будет душевное спокойствие,
     * что не интересно. Поэтому данный метод необходим, как увеличивающий
     * продажи психотропных и успокоительных лекарств, соответственно
     * стимулирующий рост экономики в сфере фарм-индустрии и соответственно
     * увеличивающий рост ВВП России. Слава Путину !!!
    */
    public List<Node<T>> iterate() {
        return children;
    }

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}



Код: sql
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.
import java.io.PrintStream;
import java.util.List;

/**
 * Дерево с возможность его печати
 */
public class Tree<T> {
	private Node<T> rootNode;
	
	public Tree( T data ) {
		/* Корневой узел владельца не имеет */
		rootNode = new Node<T>( data, null );
	}

	/**
	 * Возврашает корневой узел
	 * 
	 * @return Ссылка на корневой узел
	 */
	public Node<T> getRoot() {
		return rootNode;
	}
	
	/**
	 * Печатает дерево
	 * 
	 * @param writer Куда печатать
	 */
	public void printCatalog( PrintStream out ) {
		// Печатаем сами себя (мы главные, т.ч. без отступов)
        printNode( out, rootNode, 0 );
        // Печатаем узлы в дереве (отступы наинаются с 1 уровня)
        List<Node<T>> kids = rootNode.getChildren();
        printChildren( out, kids, 1 );
	}
	
	/**
	 * Печатает дерево на экран
	 */
	public void printCatalog( ) {
		printCatalog( System.out );
	}
	

	/**
	 * Печатает детей указанной Node (бывший printTree)
	 * 
	 * @param kids Дети для печати
	 * @param level Положение в иерархии, для генерации красивого отступа 
	 */
    private static <T> void printChildren( PrintStream out, List<Node<T>> kids, int level ) {
    	// Проверка на пустоту не нужна. Если пусто, то
    	// и for ничего делать не будет
        // if (kids.isEmpty()) {
        //     return;
        // }
    	
        // Цикл по всем узлам в переданном нам списке для печати
    	for (Node<T> kid : kids) {
            // Печатаем текущей узел
            printNode( out, kid, level );
            // Печатаем всех детей данного узла, увеличиваем уровень
            // в иерархии, что бы увеличился отступ при печати
            printChildren( out, kid.getChildren(), level+1 );
        }
    }

    /**
     * Печатает узел с отступом.
     * 
     * @param kid Узел, который нужно напечатать
     * @param level Положение в иерархии, для генерации красивого отступа
     */
    private static <T> void printNode(PrintStream out, Node<T> kid, int level ) {
    	// Печатаем отступ (без перевода строки)
    	for ( int i=0; i<level; i++ ) {
    		out.print( "  " );
    	}
        // Печатаем данные и переводим строку
        out.println(kid.getData());
    }
}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/**
 * Главный класс приложения. Создает дерево и печатает его.
 */
public class TreePrint {
    public static void main(String[] args) {
        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = rootNode.addChild( "Video" );
        Node<String> music = rootNode.addChild( "Music" );
        Node<String> picture = rootNode.addChild( "Picture" );

        video.addChild( "Terminator" );
        video.addChild( "Die Hard" );
        video.addChild( "Rocky" );
        music.addChild( "Eminem" );
        picture.addChild( "Picasso" );

        rootFolder.printCatalog();
    }
}


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


Код: 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.
import java.io.PrintStream;
import java.util.List;

/**
 * Дерево с возможность его печати
 */
public class Tree<T> {
	private Node<T> rootNode;
	
	public Tree( T data ) {
		/* Корневой узел владельца не имеет */
		rootNode = new Node<T>( data, null );
	}

	/**
	 * Возврашает корневой узел
	 * 
	 * @return Ссылка на корневой узел
	 */
	public Node<T> getRoot() {
		return rootNode;
	}
	
	/**
	 * Печатает дерево
	 * 
	 * @param writer Куда печатать
	 */
	public void printCatalog( PrintStream out ) {
		// Печатаем сами себя (мы главные, т.ч. без отступов)
        printNode( out, rootNode, 0, null );
        // Печатаем узлы в дереве (отступы наинаются с 1 уровня)
        List<Node<T>> kids = rootNode.getChildren();
        printChildren( out, kids, 1, null );
	}
	
	/**
	 * Печатает дерево на экран
	 */
	public void printCatalog( ) {
		printCatalog( System.out );
	}
	

	/**
	 * Печатает детей указанной Node (бывший printTree)
	 * 
	 * @param kids Дети для печати
	 * @param level Положение в иерархии, для генерации красивого отступа 
	 * @param isLastArr Массив, который для каждого уровня в иерархии, покащывает, печатаем
	 * ли мы последний элемент или не последний (для последнего элемента в каждом уровне не
	 * нужно печатать вертикальную черточку). Размер массива level-1 
	 */
    private static <T> void printChildren( PrintStream out, List<Node<T>> kids, int level, boolean isLastArr[] ) {
    	// Проверка на пустоту не нужна. Если пусто, то
    	// и for ничего делать не будет
        // if (kids.isEmpty()) {
        //     return;
        // }
    	// 
    	boolean curIsLastArr[];
    	curIsLastArr = new boolean[level];
    	// копируем переданные данные из isLastArr в curIsLastArr
    	// последний (текущей) будет не проинициализирован. Мы его будем
    	// заполнять, когда будем ходить по переданной коллекции
    	for ( int i=0; i<(level-1); i++ ) {
    		curIsLastArr[ i ] = isLastArr[ i ];
    	}
        // Цикл по всем узлам в переданном нам списке для печати
    	// Т.к. нам нужно знать, есть ли данные дальше, то используем 
    	// Iterator как более удобный
    	java.util.ListIterator<Node<T>> iterator;
    	iterator = kids.listIterator();
    	while ( iterator.hasNext() ) {
    		// Получаем следующий (текущей) узел
    		Node<T> kid = iterator.next();
    		// Если если есть еще данные, мы НЕ последние на данном
    		// уровне иерархии
    		// Node: т.к. индекс в массиве с 0, то последний элемент
    		// это level-1 
    		if ( iterator.hasNext() ) {
    			// НЕ последний
    			curIsLastArr[ level-1 ] = false; 
    		} else {
    			// последний 
    			curIsLastArr[ level-1 ] = true; 
    		}
        	// Печатаем текущей узел
            printNode( out, kid, level, curIsLastArr );
            // Печатаем всех детей данного узла, увеличиваем уровень
            // в иерархии, что бы увеличился отступ при печати
            printChildren( out, kid.getChildren(), level+1, curIsLastArr );
        }
    }

    /**
     * Печатает узел с отступом.
     * 
     * @param kid Узел, который нужно напечатать
     * @param level Положение в иерархии, для генерации красивого отступа
     * @param isLastArr Массив флагов, что на данном уровне иерархии печататется
     * последний элемент
     */
    private static <T> void printNode(PrintStream out, Node<T> kid, int level, boolean isLastArr[] ) {
    	// Печатаем отступы других уровней. Если на данном уровне мы последнии, то
    	// вертикальную черточку печатать не нужно
    	for ( int i=0; i<(level-1); i++ ) {
    		if ( isLastArr[i] ) {
        		out.print( "    " );  // 4 пробела
    		} else {
    		    out.print( "|   " );  // 3 пробела
    		}
    	}
        // Печатаем отступы для нашего уровня или для корня
		if ( level>0 ) {
			out.print( "+-- " );
		} else {
			// level = 0, корень, отступы не нужны
			;
		}
    	
        out.println(kid.getData());
    }
}



Код: sql
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.
/**
 * Главный класс приложения. Создает дерево и печатает его.
 */
public class TreePrint {
    public static void main(String[] args) {
        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> rootNode = rootFolder.getRoot();
        
        Node<String> video = rootNode.addChild( "Video" );
        Node<String> music = rootNode.addChild( "Music" );
        Node<String> picture = rootNode.addChild( "Picture" );
		
        Node<String> terminator = video.addChild( "Terminator" );
        terminator.addChild( "Terminator 1");
        terminator.addChild( "Terminator 2");
        Node<String> T800 = terminator.addChild( "model T-800");
        T800.addChild( "T-800 CPU");
        T800.addChild( "T-800 memory module ");
        T800.addChild( "T-800 I/O perepherals");
        video.addChild( "Die Hard" );
        Node rocky = video.addChild( "Rocky" );
        Node tmp;
        tmp = rocky.addChild( "actors");
        tmp.addChild( "Sylvester Stallone" );
        tmp = rocky.addChild( "music");
        tmp.addChild( "Bill Conti, composer");
        music.addChild( "Eminem" );
        picture.addChild( "Picasso" );

        rootFolder.printCatalog();
    }
}




Вывод


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
RootFolder
+-- Video
|   +-- Terminator
|   |   +-- Terminator 1
|   |   +-- Terminator 2
|   |   +-- model T-800
|   |       +-- T-800 CPU
|   |       +-- T-800 memory module 
|   |       +-- T-800 I/O perepherals
|   +-- Die Hard
|   +-- Rocky
|       +-- actors
|       |   +-- Sylvester Stallone
|       +-- music
|           +-- Bill Conti, composer
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693046
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaЯ ему показал
запалился, однако
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693082
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВариант более красивых отступов (при моноширинном шрифте)
Вывод


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
RootFolder
+-- Video
|   +-- Terminator
|   |   +-- Terminator 1
|   |   +-- Terminator 2
|   |   +-- model T-800
|   |       +-- T-800 CPU
|   |       +-- T-800 memory module 
|   |       +-- T-800 I/O perepherals
|   +-- Die Hard
|   +-- Rocky
|       +-- actors
|       |   +-- Sylvester Stallone
|       +-- music
|           +-- Bill Conti, composer
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso


Leonid Kudryavtsev,

очень козырно напечатали.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693088
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergunka....
очень козырно напечатали.
тут IMHO интереснее задача, козырно де-печатать. Т.е. сделать нормальный Input пользуясь отступами ))). Т.к. создавать нормальное/сложное дерево пользуясь addChild - убиться ап стену.

Задача для nastyaa )))
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693110
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevтут IMHO интереснее задача, козырно де-печатать. Т.е. сделать нормальный Input пользуясь отступами ))). Т.к. создавать нормальное/сложное дерево пользуясь addChild - убиться ап стену.


Классы Tree и Node без изменений из пред. сообщения

С табуляцией беда какая-то. В Eclipse отступы нормальные, а после копи-паст на форум, съезжают (((
Код: sql
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.
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StringReader;
import java.util.List;

/**
 * Специальный класс для иерархий из строк. Дополнительно позволяет считывать иерархию
 * из входного потока и разбирать отступы
 * 
 * Универсальный generic'ом сделать не получилось, т.к. требуется явная совметимость типа T со String
 *
 */
public class Tree4String extends Tree<String> {
	/**
	 * Константа, задает сколько пробелов должен быть отступ для одного
	 * уровня.
	 */
	public final static int spaceForOneLevel = 4;
	
	public Tree4String() {
    	     super( "Default root" );
         }

	/**
	 * Возврашает последнию ноду на заданном уровне
	 * 
	 * @param level Уровень. Нумерация с 1
	 * @return Последнию ноду на заданном уровне (и последнию по всем
	 * предыдущим уровням)
	 */
	private Node<String> getNodeByLevel( int level ) {
		Node<String> cur;
		cur = this.getRoot();
		
		// Цикл пока не доберемся до заданного уровня
		// или не кончатся данные (ошибкой не считается)
		for ( int i=1; i<level; i++ ) {
			List<Node<String>> kinds;
			kinds = cur.getChildren();
			// Пееходим на следующий уровень и ищем
			// последний элемент. Для классических
			// списков это операция крайне не оптимальна. 
			int size = kinds.size();
			if ( size==0 ) {
				// Пустой список, ничего не делаем
				;
			} else {
				// Берем последний элемент с данного уровня
				cur = kinds.get( size-1 );
			}
		}
		return cur;
	}
	
	/**
	 * Добювляет узел на заданный уровень дерева в конец списка. Если нужно, можно перенести в generic
	 * 
	 * @param level Уровень. Нумерация с 1. 0 само дерево, тогда его переименовываем
	 * @return Добавленный узел или измененный корень
	 * 
	*/
	public Node<String> addChildAtLevel( int level, String nodeData ) {
		Node<String> nodeToInsert;
		if ( level<=0 ) {
			this.getRoot().setData( nodeData );
			return this.getRoot();
		}
		nodeToInsert = this.getNodeByLevel( level );
		return nodeToInsert.addChild( nodeData );
	}
	
	/**
	 * Функция делит кол-во пробелов/символов в отступе на константу и
	 * возврашает получившийся номер уровня. Выделено в отдельную ф-цию,
	 * что бы проще управлять правилами округления 
	 */
	private int spaceToLevel( int spaceCount, int spaceForOneLevel ) {
		return (spaceCount + (spaceForOneLevel/2)) / spaceForOneLevel;
	}
	
	/**
	 * Подсчитывает кол-во пробелов/символов в отступе в конкретной строке.
	 * 
	 *  Примечание: спец. символы в начале строки так-же считаем пробелами.
	 *  
	 *  @return Позицию первого не пробельного (не отступного) символа.
	 */
	private int calculateSpaceAtString( String s ) {
		int i;
		for ( i = 0; i<s.length(); i++ ) {
			int c = s.charAt( i );
			if ( c==' ' || c=='+' || c=='-' || c=='|' ) {
				continue;
			} else {
				break;
			}
		}
		return i;
	}
	
	/**
	 * Разбирает строку с отступами и добавляет ее в дерево.
	*/
	public Node<String> addStringWithIndent( String s ) {
		int spaceCount = calculateSpaceAtString( s );
		String nodeData = s.substring( spaceCount );
		int level = this.spaceToLevel( spaceCount-1, spaceForOneLevel );
		// Trace
		// System.out.println( "s="+s+"  spaceCount="+spaceCount+" level="+level );
		return this.addChildAtLevel( level, nodeData );
	}

	/**
	 * Создает иерархию читая его из файла с отступами
	 * 
	 * @param reader Откуда читать
	 * @throws IOException
	 */
	public void read( java.io.Reader reader ) throws IOException {
		java.io.LineNumberReader lnr = new LineNumberReader( reader);
		while ( true ) {
			String s = lnr.readLine();
			if ( s==null ) {
				// End of file
				return;
			}
			this.addStringWithIndent( s );
		}
	}
	
	/**
	 * Создает иерархию читая ее из строкового буфера. Текст должен быть разделен на
	 * строки через \n или \r\n
	 * 
	 * @param text Строка содержащая текст
	 * @throws IOException 
	 */
	public void readText( String text ) throws IOException {
		// Читаем из входного потока
		java.io.StringReader reader = new StringReader( text );
        this.read( reader );
        reader.close();
	}
}



Код: sql
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.
package test_jvm;

import java.io.IOException;
import java.io.StringReader;

/**
 * Главный класс приложения. Создает дерево и печатает его.
 */
public class TreePrint2 {
	public static void test1() {
            Tree4String rootFolder = new Tree4String();

            rootFolder.addChildAtLevel( 0, "root" );
            rootFolder.addChildAtLevel( 1, "Video" );
            rootFolder.addChildAtLevel( 2, "Terminator" );
            rootFolder.addChildAtLevel( 2, "Die Hard" );
            rootFolder.addChildAtLevel( 2, "Rocky" );
            rootFolder.addChildAtLevel( 1, "Music" );
            rootFolder.addChildAtLevel( 2, "Eminem" );
            rootFolder.addChildAtLevel( 1, "Picture" );
            rootFolder.addChildAtLevel( 2, "Picasso" );

            rootFolder.printCatalog();
	}
	
	public static void test2() {
            Tree4String rootFolder = new Tree4String();

            rootFolder.addStringWithIndent( "root" );
            rootFolder.addStringWithIndent( "    Video" );
            rootFolder.addStringWithIndent( "        Terminator" );
            rootFolder.addStringWithIndent( "        Die Hard" );
            rootFolder.addStringWithIndent( "        Rocky" );
            rootFolder.addStringWithIndent( "    Music" );
            rootFolder.addStringWithIndent( "        Eminem" );
            rootFolder.addStringWithIndent( "    Picture" );
            rootFolder.addStringWithIndent( "        Picasso" );

            rootFolder.printCatalog();
	}

	public static void test3() throws IOException {
        String s =
"root\n" +
"    Video\n"+
"        Terminator\n"+
"        Die Hard\n"+
"        Rocky\n"+
"    Music\n"+
"        Eminem\n"+
"    Picture\n"+
"        Picasso";

            Tree4String rootFolder = new Tree4String();
            rootFolder.readText( s );
            rootFolder.printCatalog();
	}
	
	public static void test4() throws IOException {
		String s =
"RootFolder\r\n" + 
"+-- Video\r\n" + 
"|   +-- Terminator\r\n" + 
"|   |   +-- Terminator 1\r\n" + 
"|   |   +-- Terminator 2\r\n" + 
"|   |   +-- model T-800\r\n" + 
"|   |       +-- T-800 CPU\r\n" + 
"|   |       +-- T-800 memory module \r\n" + 
"|   |       +-- T-800 I/O perepherals\r\n" + 
"|   +-- Die Hard\r\n" + 
"|   +-- Rocky\r\n" + 
"|       +-- actors\r\n" + 
"|       |   +-- Sylvester Stallone\r\n" + 
"|       +-- music\r\n" + 
"|           +-- Bill Conti, composer\r\n" + 
"+-- Music\r\n" + 
"|   +-- Eminem\r\n" + 
"+-- Picture\r\n" + 
"    +-- Picasso";

              Tree4String rootFolder = new Tree4String();
              rootFolder.readText( s );
              rootFolder.printCatalog();
        }

        public static void main(String[] args) throws IOException {
		System.out.println( "\n\n************ TEST 1 ************\n\n" );
    	        test1();

		System.out.println( "\n\n************ TEST 2 ************\n\n" );
    	        test2();
		
                System.out.println( "\n\n************ TEST 3 ************\n\n" );
    	        test3();
		
                System.out.println( "\n\n************ TEST 4 ************\n\n" );
    	         test4();
       }
}





Код: plaintext
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.
************ TEST 1 ************


root
+-- Video
|   +-- Terminator
|   +-- Die Hard
|   +-- Rocky
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso


************ TEST 2 ************


root
+-- Video
|   +-- Terminator
|   +-- Die Hard
|   +-- Rocky
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso


************ TEST 3 ************


root
+-- Video
|   +-- Terminator
|   +-- Die Hard
|   +-- Rocky
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso


************ TEST 4 ************


RootFolder
+-- Video
|   +-- Terminator
|   |   +-- Terminator 1
|   |   +-- Terminator 2
|   |   +-- model T-800
|   |       +-- T-800 CPU
|   |       +-- T-800 memory module 
|   |       +-- T-800 I/O perepherals
|   +-- Die Hard
|   +-- Rocky
|       +-- actors
|       |   +-- Sylvester Stallone
|       +-- music
|           +-- Bill Conti, composer
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693113
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
вместо
Код: java
1.
		int level = this.spaceToLevel( spaceCount-1, spaceForOneLevel );


должно быть просто (-1 тут лишний)
Код: java
1.
		int level = this.spaceToLevel( spaceCount, spaceForOneLevel );


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

Вообще никак? с data?

Это нарушает The Single Responsibility Principle

https://ru.m.wikipedia.org/wiki/SOLID_(объектно-ориентированное_программирование)

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

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

Спасибо вам))) большое ценю вашу помощь))
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693200
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
Кстати как можно объединить эти две рекурсии printCatalog и printTree в одну новую что в самом низу кода которую назвал printTree
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    
    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode( rootFolder, 0 );
        List<Node<T>> kids = rootFolder.getChildren();
        printTree(kids, 1 );
    }

    private static <T> void printTree(List<Node<T>> kids, int level ) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid, level );
            printTree(kid.getChildren(), level+1 );
        }
    }

private static <T> void printTree(Node<T> node) {
       ???????????????????????????????????????????
       ????????????????????????????????????????
        
    }
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693207
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaLeonid Kudryavtsev,
Кстати как можно объединить эти две рекурсии printCatalog и printTree в одну новую что в самом низу кода которую назвал printTree
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    
    private static <T> void printCatalog(Tree<T> rootFolder) {
        printNode( rootFolder, 0 );
        List<Node<T>> kids = rootFolder.getChildren();
        printTree(kids, 1 );
    }

    private static <T> void printTree(List<Node<T>> kids, int level ) {
        if (kids.isEmpty()) {
            return;
        }
        for (Node<T> kid : kids) {
            printNode(kid, level );
            printTree(kid.getChildren(), level+1 );
        }
    }

private static <T> void printTree(Node<T> node) {
       ???????????????????????????????????????????
       ????????????????????????????????????????
        
    }



Добрый день,

Рад что Леонид написал эти замечательные коды.

Надеюсь этот метод тоже получится добавить.

ЗЫ. Вы обещали тестовые файлы для конвертора прислать.

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

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

как эти два года объединить не подскажите в один который я создала новый treePrint
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693213
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.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;

import java.util.*;

public class TreePrint {
    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        
        
        Node<String> video = rootFolder.addChild( "Video" );
        Node<String> music = rootFolder.addChild( "Music" );
        Node<String> picture = rootFolder.addChild( "Picture" );

        video.addChild( "Terminator" );
        video.addChild( "Die Hard" );
        video.addChild( "Rocky" );
        music.addChild( "Eminem" );
        picture.addChild( "Picasso" );

        

    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null){
            for (Node childNode: node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

   
    private static <T> void printNode(Node<T> kid, int level ) {
    	
    	for ( int i=0; i<level; i++ ) {
    		System.out.print( "  " );
    	}
        
        System.out.println(kid.getData());
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693221
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

Нет вызова для метода printTree внутри main.

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

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

Нужно добавить вызов для printTree внутри main.

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693226
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.
public class Main
{
	public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");



        Node<String> video = rootFolder.addChild( "Video" );
        Node<String> music = rootFolder.addChild( "Music" );
        Node<String> picture = rootFolder.addChild( "Picture" );

        video.addChild( "Terminator" );
        video.addChild( "Die Hard" );
        video.addChild( "Rocky" );
        music.addChild( "Eminem" );
        picture.addChild( "Picasso" );

        printTree(rootFolder);
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null){
            for (Node childNode: node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }


    private static <T> void printNode(Node<T> kid, int level ) {

        for ( int i=0; i<level; i++ ) {
            System.out.print( "  " );
        }

        System.out.println(kid.getData());
    }
    
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693227
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

И вообще я правильно написала код где те старые две рекурсии соединила в один printTree

Вроде бы правильно написано.

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

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

мне сказали работать с contains
на примере этого
Код: java
1.
2.
list 1
boolean = 1.contains("object)



чтобы допустим я буду искать какой то элемент в дереве и если он будет то нужно чтобы выводило true
как можно реализовать это в коде?


Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture1 = picture.addChild("Picasso");
        picture1.addChild("P1");
        Node<String> picture2 = picture1.addChild("P2");
        picture2.addChild("P3");
        picture2.addChild("P3");

        printTree(rootFolder);
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
    }
}

---------------------------------------------------
 import java.util.List;


public class Tree<T> extends Node<T> {

    public Tree(T data) {

        super(data, null);
    }
}
--------------------------------------------
import java.util.ArrayList;

import java.util.List;


public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;


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

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


    public Node<T> addChild(T nodeData) {

        Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }


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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693436
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

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

мне сказали работать с contains
на примере этого
Код: java
1.
2.
list 1
boolean = 1.contains("object)



чтобы допустим я буду искать какой то элемент в дереве и если он будет то нужно чтобы выводило true
как можно реализовать это в коде?


Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture1 = picture.addChild("Picasso");
        picture1.addChild("P1");
        Node<String> picture2 = picture1.addChild("P2");
        picture2.addChild("P3");
        picture2.addChild("P3");

        printTree(rootFolder);
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
    }
}

---------------------------------------------------
 import java.util.List;


public class Tree<T> extends Node<T> {

    public Tree(T data) {

        super(data, null);
    }
}
--------------------------------------------
import java.util.ArrayList;

import java.util.List;


public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;


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

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


    public Node<T> addChild(T nodeData) {

        Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }


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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}



Настя,

Спросите у инструктора почему вместо лист не использовать LinkedHashMap

На самом деле это походу то к чему он Вас планомерно ведет.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693469
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настя,

чтобы допустим я буду искать какой то элемент в дереве и если он будет то нужно чтобы выводило true
как можно реализовать это в коде?

Примерно так же как и печатаете только возвращает тру когда елемент находится т.е. Вам надо еще сделать в Node классе метод equals и hashCode

Хорошая новость для Вас это сгенерит IDE.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693504
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,
Contains я правильно добавила?
Код: 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.
import java.util.ArrayList;

import java.util.List;


public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

   
    public Node<T> addChild(T nodeData) {
    	
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public boolean contains(List<T> list, Object o) {
        if (list.contains(o)) {
            return true;
        } else 
           return false;
        
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693570
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSergunka,
Contains я правильно добавила?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
    public boolean contains(List<T> list, Object o) {
        if (list.contains(o)) {
            return true;
        } else 
           return false;
        
    }
...


IMHO

1) Масло-масленное. Что делает Ваш метод, совершенно не понятно
2) Тут, могу только предполагать, что Вам нужен был метод ищущий в СВОЕМ списке. Тогда он должен иметь заголовок
Код: sql
1.
2.
3.
    public boolean contains(Node<T> o) {
..... /* Вставить то, что нужно. За 2 недели еб#$%и мозгов Java, уже должны были какие-то инстинкты выработаться */
}


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

А вообще через него можно искать элементы в моем дереве
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693592
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

Мне сказали без LinkedMap. Просто в моем дереве использовать contains. Допустим в моем же дереве есть элемент терминатор, то он должен выводить true, а если нету терминатора то false
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693595
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
Не подскажите какой метод, чтобы работало в моем дереве
Код: java
1.
2.
3.
4.
 public boolean contains(Node<T> o) {
        return false;

    
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693596
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaА вообще через него можно искать элементы в моем дереве
Наверное можно. Метод как метод.

Я бы предложил следующую реализацию в классе Node. Немного переутяжелено, т.к.
добавил флаг глобального поиска
Код: sql
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.
    /**
     * Возвращает hashCode. Требуется для корректной работы стандартных коллекций
     */
    @Override
	public int hashCode() {
		return this.data.hashCode();
	}

    /**
     * Провеяем эквивалентность двух узлов по их содержимому.
     */
	@Override
	public boolean equals(Object obj) {
		return this.data.equals( ((Node<T>)obj).data );
	}

	/**
     *  Ищем, есть ли уже узел с такими данными.
     * 
     * @param obj Данные с которыми сверяемся.
     * @param global Если false, то поиск только в текущем узле, если true,
     * то по всему дереву
     */
    public boolean contains( Node<T> obj, boolean global ) {
    	/* Проверка на текущем уровне */
    	if ( this.children.contains(obj) ) {
    		return true;
    	}
    	/* Если требуется глобальная проверка, рекурсивно проверяем и у детей */
    	if ( global ) {
    		for ( Node<T> kind: this.children ) {
    			if ( kind.contains( obj, global ) ) {
    				return true;
    			}
    		}
    	}
    	return false;
    }

    /**
     * Ищет данные в дереве
     */
    public boolean contains( T obj, boolean global ) {
    	// Временный объект для поиска
    	Node<T> tmp = new Node<T>( obj, null );
    	// Ищем
    	return this.contains( tmp, global );
    }
    
    /**
     * Ищет данные в дереве глобально
    */
    public boolean contains( T obj ) {
    	return this.contains( obj, true );
    }




Проверку на уникальность - не проверял. Может не работать
Отступы уехали, у меня tab по умолчанию 4 символа (((
Код: sql
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.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
package test_jvm;

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

/**
 * Класс элемента дерева и, собственно, само дерево.
 * 
*/
public class Node<T> {
    private T data;
    private List<Node<T>> children = new ArrayList<>();
    private Node<T> parent;
    /*
     * Константы задающие тип иникальности
     */
    /**
     * Иерархия не контролирует иникальность добавленных записей
     */
    public static final int NO_UNIQUE = 0;
    /**
     * Дубли на одном уровне не допускаются
     */
    public static final int LEVEL_UNIQUE = 1;
    /**
     * Дубли на допускаются целиком по дерево (ниже лежащим уровням)
     */
    public static final int GLOBAL_UNIQUE = 2;
    
    /**
     * 
     */
    public int uniqueMode;
    /**
     * Создает новый КОРНЕВОЙ узел. Проставляет флаг уникальности. 
     * 
     * @param data Данные для нового узла
     * @param parent Ссылка на родителя данного узла
     * @aram uniqueMode режим уникальности
     * 
    */
    public Node(T data, Node<T> parent, int uniqueMode ) {
        this.data = data;
        this.parent = parent;
        this.uniqueMode = uniqueMode;
    }
    
    /**
     * Создает новый узел. Флаг уникальности копируется из предка. Что
     * обеспечивает, что все дерево будет иметь один и тот же режим
     * проверки уникальности 
    */
    public Node( T data, Node<T> parent ) {
    	if ( parent==null ) {
            this.data = data;
            this.parent = parent;
            this.uniqueMode = NO_UNIQUE;
    	} else {
            this.data = data;
            this.parent = parent;
            this.uniqueMode = this.parent.uniqueMode;
    	}
    }

    
    /**
     * Возвращает hashCode. Требуется для корректной работы стандартных коллекций
     */
    @Override
	public int hashCode() {
		return this.data.hashCode();
	}

    /**
     * Провеяем эквивалентность двух узлов по их содержимому.
     */
	@Override
	public boolean equals(Object obj) {
		return this.data.equals( ((Node<T>)obj).data );
	}

	/**
     *  Ищем, есть ли уже узел с такими данными.
     * 
     * @param obj Данные с которыми сверяемся.
     * @param global Если false, то поиск только в текущем узле, если true,
     * то по всему дереву
     */
    public boolean contains( Node<T> obj, boolean global ) {
    	/* Проверка на текущем уровне */
    	if ( this.children.contains(obj) ) {
    		return true;
    	}
    	/* Если требуется глобальная проверка, рекурсивно проверяем и у детей */
    	if ( global ) {
    		for ( Node<T> kind: this.children ) {
    			if ( kind.contains( obj, global ) ) {
    				return true;
    			}
    		}
    	}
    	return false;
    }

    /**
     * Ищет данные в дереве
     */
    public boolean contains( T obj, boolean global ) {
    	// Временный объект для поиска
    	Node<T> tmp = new Node<T>( obj, null );
    	// Ищем
    	return this.contains( tmp, global );
    }
    
    /**
     * Ищет данные в дереве глобально
    */
    public boolean contains( T obj ) {
    	return this.contains( obj, true );
    }
    
    public void addChild(Node<T> node) throws NotUniqueException {
    	/*
    	 *  Если требуется обеспечение уникальности, то проверяем, что
    	 * узла с такими данными еще не существует
    	 */
    	if ( uniqueMode!=Node.NO_UNIQUE ) {
    		if ( this.contains( node, uniqueMode==Node.GLOBAL_UNIQUE )) {
    			throw new NotUniqueException();
    		}
    	}
        children.add(node);
    }

    /**
     * Создает узел и добавляет его в иерархию на основе его данных.
     * 
     * @param nodeData Данные для нового узла
     * @return Возвращает вновь созданный узел
     * @throws NotUniqueException 
     */
    public Node<T> addChild(T nodeData) throws NotUniqueException {
    	// Создаваемый узел будет принадлежать нашему. Т.ч. его
    	// parent - это мы
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        this.addChild( newNode );
        return newNode;
    }

    /**
     * Специальный метод, что бы всех разбирающихся в структурах
     * данных доводить до иступления.
     * Все знаю, что метод iterate должен возвращать интератор, а
     * не коллекцию. Если итератора нет, то и нафиг такой метод.
     * 
     * НО ! Если его не будет, тогда у всех будет душевное спокойствие,
     * что не интересно. Поэтому данный метод необходим, как увеличивающий
     * продажи психотропных и успокоительных лекарств, соответственно
     * стимулирующий рост экономики в сфере фарм-индустрии и соответственно
     * увеличивающий рост ВВП России. Слава Путину !!!
    */
    public List<Node<T>> iterate() {
        return children;
    }

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}



Код: sql
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.
package test_jvm;

import java.io.PrintStream;
import java.util.List;

/**
 * Дерево с возможность его печати
 */
public class Tree<T> {
	private Node<T> rootNode;

	public Tree( T data ) {
		/* Корневой узел владельца не имеет */
		rootNode = new Node<T>( data, null, Node.NO_UNIQUE );
	}

	/**
	 * Создает дерево с заданным типом проверки уникальности
	 * @param data
	 */
	public Tree( T data, int uniqueMode ) {
		/* Корневой узел владельца не имеет, зато может иметь проверку уникальности */
		rootNode = new Node<T>( data, null, uniqueMode );
	}

	/**
	 * Возврашает корневой узел
	 * 
	 * @return Ссылка на корневой узел
	 */
	public Node<T> getRoot() {
		return rootNode;
	}
	
	/**
	 * Печатает дерево
	 * 
	 * @param writer Куда печатать
	 */
	public void printCatalog( PrintStream out ) {
		// Печатаем сами себя (мы главные, т.ч. без отступов)
        printNode( out, rootNode, 0, null );
        // Печатаем узлы в дереве (отступы наинаются с 1 уровня)
        List<Node<T>> kids = rootNode.getChildren();
        printChildren( out, kids, 1, null );
	}
	
	/**
	 * Печатает дерево на экран
	 */
	public void printCatalog( ) {
		printCatalog( System.out );
	}
	
	

	/**
	 * Печатает детей указанной Node (бывший printTree)
	 * 
	 * @param kids Дети для печати
	 * @param level Положение в иерархии, для генерации красивого отступа 
	 * @param isLastArr Массив, который для каждого уровня в иерархии, покащывает, печатаем
	 * ли мы последний элемент или не последний (для последнего элемента в каждом уровне не
	 * нужно печатать вертикальную черточку). Размер массива level-1 
	 */
    private static <T> void printChildren( PrintStream out, List<Node<T>> kids, int level, boolean isLastArr[] ) {
    	// Проверка на пустоту не нужна. Если пусто, то
    	// и for ничего делать не будет
        // if (kids.isEmpty()) {
        //     return;
        // }
    	// 
    	boolean curIsLastArr[];
    	curIsLastArr = new boolean[level];
    	// копируем переданные данные из isLastArr в curIsLastArr
    	// последний (текущей) будет не проинициализирован. Мы его будем
    	// заполнять, когда будем ходить по переданной коллекции
    	for ( int i=0; i<(level-1); i++ ) {
    		curIsLastArr[ i ] = isLastArr[ i ];
    	}
        // Цикл по всем узлам в переданном нам списке для печати
    	// Т.к. нам нужно знать, есть ли данные дальше, то используем 
    	// Iterator как более удобный
    	java.util.ListIterator<Node<T>> iterator;
    	iterator = kids.listIterator();
    	while ( iterator.hasNext() ) {
    		// Получаем следующий (текущей) узел
    		Node<T> kid = iterator.next();
    		// Если если есть еще данные, мы НЕ последние на данном
    		// уровне иерархии
    		// Node: т.к. индекс в массиве с 0, то последний элемент
    		// это level-1 
    		if ( iterator.hasNext() ) {
    			// НЕ последний
    			curIsLastArr[ level-1 ] = false; 
    		} else {
    			// последний 
    			curIsLastArr[ level-1 ] = true; 
    		}
        	// Печатаем текущей узел
            printNode( out, kid, level, curIsLastArr );
            // Печатаем всех детей данного узла, увеличиваем уровень
            // в иерархии, что бы увеличился отступ при печати
            printChildren( out, kid.getChildren(), level+1, curIsLastArr );
        }
    }

    /**
     * Печатает узел с отступом.
     * 
     * @param kid Узел, который нужно напечатать
     * @param level Положение в иерархии, для генерации красивого отступа
     * @param isLastArr Массив флагов, что на данном уровне иерархии печататется
     * последний элемент
     */
    private static <T> void printNode(PrintStream out, Node<T> kid, int level, boolean isLastArr[] ) {
    	// Печатаем отступы других уровней. Если на данном уровне мы последнии, то
    	// вертикальную черточку печатать не нужно
    	for ( int i=0; i<(level-1); i++ ) {
    		if ( isLastArr[i] ) {
        		out.print( "    " );  // 4 пробела
    		} else {
    		    out.print( "|   " );  // 3 пробела
    		}
    	}
        // Печатаем отступы для нашего уровня или для корня
		if ( level>0 ) {
			out.print( "+-- " );
		} else {
			// level = 0, корень, отступы не нужны
			;
		}
    	
        out.println(kid.getData());
    }
}



Код: sql
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.
package test_jvm;

import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StringReader;
import java.util.List;

/**
 * Специальный класс для иерархий из строк. Дополнительно позволяет считывать иерархию
 * из входного потока и разбирать отступы
 * 
 * Универсальный generic'ом сделать не получилось, т.к. требуется явная совметимость типа T со String
 *
 */
public class Tree4String extends Tree<String> {
	/**
	 * Константа, задает сколько пробелов должен быть отступ для одного
	 * уровня.
	 */
	public final static int spaceForOneLevel = 4;
	
	public Tree4String() {
    	super( "Default root" );
    }

	/**
	 * Возврашает последнию ноду на заданном уровне
	 * 
	 * @param level Уровень. Нумерация с 1
	 * @return Последнию ноду на заданном уровне (и последнию по всем
	 * предыдущим уровням)
	 */
	private Node<String> getNodeByLevel( int level ) {
		Node<String> cur;
		cur = this.getRoot();
		
		// Цикл пока не доберемся до заданного уровня
		// или не кончатся данные (ошибкой не считается)
		for ( int i=1; i<level; i++ ) {
			List<Node<String>> kinds;
			kinds = cur.getChildren();
			// Пееходим на следующий уровень и ищем
			// последний элемент. Для классических
			// списков это операция крайне не оптимальна. 
			int size = kinds.size();
			if ( size==0 ) {
				// Пустой список, ничего не делаем
				;
			} else {
				// Берем последний элемент с данного уровня
				cur = kinds.get( size-1 );
			}
		}
		return cur;
	}
	
	/**
	 * Добювляет узел на заданный уровень дерева в конец списка.
	 * 
	 * @param level Уровень. Нумерация с 1. 0 само дерево, тогда его переименовываем
	 * @return Добавленный узел или измененный корень
	 * @throws NotUniqueException 
	 * 
	*/
	public Node<String> addChildAtLevel( int level, String nodeData ) throws NotUniqueException {
		Node<String> nodeToInsert;
		if ( level==0 ) {
			this.getRoot().setData( nodeData );
			return this.getRoot();
		}
		nodeToInsert = this.getNodeByLevel( level );
		return nodeToInsert.addChild( nodeData );
	}
	
	/**
	 * Функция делит кол-во пробелов/символов в отступе на константу и
	 * возврашает получившийся номер уровня. Выделено в отдельную ф-цию,
	 * что бы проще управлять правилами округления 
	 */
	private int spaceToLevel( int spaceCount, int spaceForOneLevel ) {
		return (spaceCount + (spaceForOneLevel/2)) / spaceForOneLevel;
	}
	
	/**
	 * Подсчитывает кол-во пробелов/символов в отступе в конкретной строке.
	 * 
	 *  Примечание: спец. символы в начале строки так-же считаем пробелами.
	 *  
	 *  @return Позицию первого не пробельного (не отступного) символа.
	 */
	private int calculateSpaceAtString( String s ) {
		int i;
		for ( i = 0; i<s.length(); i++ ) {
			int c = s.charAt( i );
			if ( c==' ' || c=='+' || c=='-' || c=='|' ) {
				continue;
			} else {
				break;
			}
		}
		return i;
	}
	
	/**
	 * Разбирает строку с отступами и добавляет ее в дерево.
	 * @throws NotUniqueException 
	*/
	public Node<String> addStringWithIndent( String s ) throws NotUniqueException {
		int spaceCount = calculateSpaceAtString( s );
		String nodeData = s.substring( spaceCount );
		int level = this.spaceToLevel( spaceCount, spaceForOneLevel );
		// Trace
		// System.out.println( "s="+s+"  spaceCount="+spaceCount+" level="+level );
		return this.addChildAtLevel( level, nodeData );
	}

	/**
	 * Создает иерархию читая его из файла с отступами
	 * 
	 * @param reader Откуда читать
	 * @throws IOException
	 * @throws NotUniqueException 
	 */
	public void read( java.io.Reader reader ) throws IOException, NotUniqueException {
		java.io.LineNumberReader lnr = new LineNumberReader( reader);
		while ( true ) {
			String s = lnr.readLine();
			if ( s==null ) {
				// End of file
				return;
			}
			this.addStringWithIndent( s );
		}
	}
	
	/**
	 * Создает иерархию читая ее из строкового буфера. Текст должен быть разделен на
	 * строки через \n или \r\n
	 * 
	 * @param text Строка содержащая текст
	 * @throws IOException 
	 * @throws NotUniqueException 
	 */
	public void readText( String text ) throws IOException, NotUniqueException {
		// Читаем из входного потока
		java.io.StringReader reader = new StringReader( text );
        this.read( reader );
        reader.close();
	}
}



Код: sql
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 test_jvm;

import java.io.IOException;
import java.io.StringReader;

/**
 * Главный класс приложения. Создает дерево и печатает его.
 * Проверяет работу метода contains и не возможность добавить дубли
 */
public class TreePrint3 {
	public static void test1() throws IOException, NotUniqueException {
        String s =
"root\n" +
"    Video\n"+
"        Terminator\n"+
"        Die Hard\n"+
"        Rocky\n"+
"    Music\n"+
"        Eminem\n"+
"    Picture\n"+
"        Picasso";

        Tree4String rootFolder = new Tree4String();
        rootFolder.readText( s );
        rootFolder.printCatalog();
        Node<String> rootNode = rootFolder.getRoot();

   	 	System.out.println( "" );
   	 	
        if ( rootNode.contains( "nastyaa" ) ) {
        	System.out.println( "There is nastyaa in tree" );
        } else {
       	 	System.out.println( "There is NOT nastyaa in tree" );
        }

        if ( rootNode.contains( "Video" ) ) {
       	 	System.out.println( "There is Video in tree" );
        } else {
      	 	System.out.println( "There is NOT Video in tree" );
        }

        if ( rootNode.contains( "Picasso" ) ) {
       	 	System.out.println( "There is Picasso in tree" );
        } else {
      	 	System.out.println( "There is NOT Picasso in tree" );
        }
	}
	

	public static void main(String[] args) throws IOException, NotUniqueException {
		System.out.println( "\n\n************ TEST 1 ************\n\n" );
    	test1();
    }
}



вывод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
************ TEST 1 ************


root
+-- Video
|   +-- Terminator
|   +-- Die Hard
|   +-- Rocky
+-- Music
|   +-- Eminem
+-- Picture
    +-- Picasso

There is NOT nastyaa in tree
There is Video in tree
There is Picasso in tree
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693597
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Я очень ценю вашу помощь) но как реализовать это не изменяю полностью мой код, просто добавить метод contains(
Мне сказали не изменять код просто добавить contains
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693603
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Спасибо вам) что за комментили коды и все вроде понимаю как работает.
Но мне(((( сказали не изменять код просто добавить contains
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693631
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я специально без спойлера просто привел "метод contains"

Что бы стандартный contains в коллекции работал корректно, требуется реализовать метод equals и hashCode. Т.ч. одного метода contains не достаточно.

"Нормально" contains будет искать экземпляры с тем типом, который лежит в коллекции children, т.е. с типом Node<T> . Это не очень удобно. Поэтому нужна реализация двух версий contains. одна (базовая) которая ищет объекты Node<T> и другая, которая ищет <T> (методом создания на его основе экземпляра Node<T> и дальнейшего поиска вновь созданного экземпляра)

Итого, как минимум нужно: hashCode, equals, contains( Node<T> ), contains( T )

Выкинуть параметр global, если он Вам не нужен, мне кажется Вы должны быть способны. Я в Вас верю )))
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693632
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
Русский язык в комментариях лучше поправить. Я кроме Java, C, PL/SQL и немного Assembler'а других языков не знаю. Немного читаю по слогам на русском и техническом английском, но писать на них не умею (((
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693636
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Код: 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.
import java.util.ArrayList;

import java.util.List;


public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

   
    public Node<T> addChild(T nodeData) {
    	
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public boolean contains(List<Node<String>> childrens, String text) {
    return recurse(childrens, text);
}
 
private boolean recurse(List<Node<String>> childrens, String text) {
    return childrens.stream()
        .anyMatch(children -> children.data.equals(text) || children.children.size() > 0 && recurse(children.children, text));
}
 
 

    
    }

----------------------------------
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;

import java.util.*;

public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture1 = picture.addChild("Picasso");
        picture1.addChild("P1");
        Node<String> picture2 = picture1.addChild("P2");
        picture2.addChild("P3");
        picture2.addChild("P3");

        printTree(rootFolder);
        System.out.println(rootFolder.contains(rootFolder.getChildren(), "Terminator"));
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
        
    }
}
        
    



Выводит-
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
RootFolder
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
      P1
      P2
        P3
        P3
true
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693637
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Я сделала)
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693640
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaЯ сделала)
Молодец !
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693643
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Но спасибо вам)) ваш код многое объяснил мне )
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693646
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaLeonid Kudryavtsev,

Я сделала)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public boolean contains(List<Node<String>> childrens, String text) {
    return recurse(childrens, text);
}
 
private boolean recurse(List<Node<String>> childrens, String text) {
    return childrens.stream()
        .anyMatch(children -> children.data.equals(text) || children.children.size() > 0 && recurse(children.children, text));
}



Класс!

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

Блин за что((( мне сказали не правильно((
типа contains должен быть в классе tree и должен передать один параметр и через main запускать его вот так:
Код: java
1.
boolean b1 = rootFolder.contains("Eminem"):



на примере:
Код: java
1.
2.
3.
4.
 List l = new ArrayList();
        l.add("123");
        boolean b = l.contains("123");
        System.out.println("Exists:" + b);



только с деревом так нужно сделать(
можете помочь я че то не могу сообразить как в tree его запихать и запустить.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693676
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

а на каких курсах и в каком городе вам такие задачки дают ?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693677
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot nastyaa]
Блин за что((( мне сказали не правильно((
типа contains должен быть в классе tree и должен передать один параметр и через main запускать его вот так:
Код: java
1.
boolean b1 = rootFolder.contains("Eminem"):



Ну да. Все правильно сказали. Зачем передавать в него childrens (почему опять "s" на конце?), когда эта информация и так известна внутри класса ( в классе Tree: this.getRoot().getChildren(), в классе Node: this.getChildren() )

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

не подскажите как его написать( я только сообразила как в node это делать
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693686
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu....и в каком городе....
Я так понимаю, Ростов-на-дону. AFAIK

Вроде этот вопрос уже выяснили. Но что бы помогать Насти, как минимум нужно пиво. Нормальное выпить пива там можно или в Ерще или, в крайнем случае, в Буковском. Первое это спорт-бар с крафтовым пивом ( Jaws ипа, неплохой бутылочный овсяной стаут, бельгия), второе очень хороший ресторан с очень хорошим обслуживанием. AFAIK & IMHO
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693688
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaLeonid Kudryavtsev,

не подскажите как его написать( я только сообразила как в node это делать
сообразила или кто-то за тебя написал?

У тебя же и так contains в Tree находится? (см. твой код, contains вызывается из класса Tree)
Код: sql
1.
2.
3.
        Tree<String> rootFolder = new Tree<>("RootFolder");
...
        System.out.println(rootFolder.contains(rootFolder.getChildren(), "Terminator"));
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693690
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

contains находится в Node
и запускаем его в TreePrint

вот мой класс Tree -
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
package treeadil;

import java.util.List;


public class Tree<T> extends Node<T> {

    public Tree(T data) {
        
        super(data, null);
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693700
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaapublic class Tree<T> extends Node<T>

ааа.... понятно. Тогда все нормально. Просто убрать параметр childrens из описания ф-ции

Код: java
1.
2.
3.
public boolean contains(List<Node<String>> childrens, String text) {
    return recurse(childrens, text);
}



Параметр childrens НЕ нужен. Единственная сложность, это отсутвие пива, после 0.5 (даже после 0.33) литров нормального стаута, Вы бы сообразили, что он НЕ нужен )))) Информация о детях и так уже содержится в классе Node, передавать ее в качестве параметра НЕ нужно.

Ну и раз метод определен в генерике (шаблоне Node<T>), то вместо String нужно использовать T.

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

ошибка как я что то не поняла((
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693710
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
название курсов AFAIK ?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693711
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693712
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x17.mstu,

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

Просто нужно чтобы как раньше элемент искал в дереве и если он есть то true а если нету то false.
и в main надо проверить программу через код -
Код: java
1.
//boolean b1 = rootFolder.contains("Eminem"):




на примере этого только с деревом-
Код: java
1.
2.
3.
4.
 List l = new ArrayList();
        l.add("123");
        boolean b = l.contains("123");
        System.out.println("Exists:" + b);
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693722
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaПросто нужно чтобы как раньше элемент искал в дереве и если он есть то true а если нету то false.
и в main надо проверить программу через код -
Код: java
1.
//boolean b1 = rootFolder.contains("Eminem"):




Т.е. нужно, что бы в классе Tree был метод contains, который принммает строку и возврашает true или false.

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

public.....

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

ну что бы выводило мне сказади чтобы не String передовал а как в коде один параметр <T>
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
      P1
      P2
        P3
        P3

true(если мы будем искать терминатор в дереве)
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693728
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
В этом классе нужно написать contains
Код: java
1.
2.
3.
4.
5.
public class Tree<T> extends Node<T> {

    public Tree(T data) {
        
        super(data, null);
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693731
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa...ну что бы выводило мне сказади чтобы не String передовал а как в коде один параметр <T> ...


Я пока иду от "написанного в ТЗ". До T потом доберемся ))) пусть сначала хоть String будет, но синтаксически правильный )))

nastyaaПросто нужно чтобы как раньше элемент искал в дереве и если он есть то true а если нету то false.
и в main надо проверить программу через код -
Код: java
1.
//boolean b1 = rootFolder.contains("Eminem"):




Т.е. нужно, что бы в классе Tree был метод contains, который принммает строку и возврашает true или false.

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

public.....

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

мне сказали без String. У меня же дерево построено по параметру <T> и его надо использовать
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693736
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaLeonid Kudryavtsev,

мне сказали без String. У меня же дерево построено по параметру <T> и его надо использовать
Бог с ним, с T... Хоть String, хоть T... на данном этапе это пофиг.

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

/уже аж на 4 вопроса разбил ))), куда уж далее ))) вопросы для полного новичка, а Вы Java уже 2 недели мучаете))) /
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693740
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Сколько у метода contains должно быть параметров? Один параметр
Какого типа?
Какой тип результата?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
      P1
      P2
        P3
        P3

true


Как должно выглядить описание (первая строчка) этого метода? Я честно не знаю там boolean примерно вот так
Код: java
1.
public boolean contains(List<Node<T>>) {
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693745
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaСколько у метода contains должно быть параметров? Один параметр
Ok

Какого типа?

???
Думать НЕ нужно. Если не получается "расслабиться и получать удовольствие" ( C ), то срочно выпить алкоголя
(возможно может еще MDMA помочь, если Вы в поставщике и чистоте соединения уверены)

nastyaaПросто нужно чтобы как раньше элемент искал в дереве и если он есть то true а если нету то false.
и в main надо проверить программу через код -
Код: java
1.
//boolean b1 = rootFolder.contains("Eminem"):




Мы уже дошли до того, что параметр один ))) это уже хорошо )))
Так какого типа должен быть параметр, что бы вызывать метод contains строкой вида

boolean b1 = rootFolder.contains("Eminem"):
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693746
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

наверное string )
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693788
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,
универ?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693822
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaнаверное string )

сорри, сейчас по работе занят, не могу часто в Инет вылезать

Итого:

Метод называется contains
Один параметр с типом String (какое данному параметру дадим имя?)
Возврашает boolean

Как должна выглядить строка с описанием/декларацией данного метода?

public .....
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693827
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, чтоб ты жил на 1 зарплату!
Лёня, желаю чтобы у тебя такое же чудо было проджект-мегерой. Или хотя бы анал&<тегом> (твое "любимое" существо!!!).
Спросишь - Почему?
- Да потому что сам(о) то он(о) работать не сможет, зато навык применения "морковки для осликов" хорошо освоил(о), будет руководить.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693848
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFFTOPIC ON

Лет 15 назад, по радио, было интервью с вновь назначенным председателем комитета по культуре СПб.
Вопрос: а какое у Вас образование и что общего Вы имеете с культурой.
Ответ: ничего общего не имею, но очень сильно хочу помочь /городу, мэру/ )))

Ну как минимум "очень сильное желание" nastyaa показывает. Похвально. Может ли это желание перерасти в знание Java - я не знаю. Был бы март и мартовские цены на авиа-билеты, я бы прилетел, и за кегой пива, за пару дней (суббота + ночь + воскресенье) объяснил бы ))) Кега, т.к. явно за два дня одной кружкой бы не ограничилось )))
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693864
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,


в моем старом коде там он передает два параметра childrens лишний был. Нужно просто этот код взять и вставив его в класс Tree переделать под один параметр и исползьовать <T> и запустить в main как я написала
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693866
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

вот так надо в main его запускать
Код: java
1.
boolean b1 = rootFolder.contains("Eminem"):



А этот код из класса Node перетащить в класс Tree и в коде string поменять на <T> и убрать childrens и string text
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public boolean contains(List<Node<String>> childrens, String text) {
    return recurse(childrens, text);
}
 
private boolean recurse(List<Node<String>> childrens, String text) {
    return childrens.stream()
        .anyMatch(children -> children.data.equals(text) || children.children.size() > 0 && recurse(children.children, text));
}




пример мне показали только в этот раз дерево -
Код: java
1.
&#231;
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693867
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,
вот такой пример только его в моем дереве надо по этому примеру использовать
Код: java
1.
2.
3.
4.
List l = new ArrayList();
        l.add("123");
        boolean b = l.contains("123");
        System.out.println("Exists:" + b);
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693869
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaв моем старом коде там он передает два параметра childrens лишний был. Нужно просто этот код взять и вставив его в класс Tree переделать под один параметр и исползьовать <T> и запустить в main как я написала

Я так же думаю. Вперед ))).

На каком шаге проблема?

nastyaaвставив его в класс Tree переделать под один параметр

Как должна выглядить описание метода contains с одним параметром с именем text и типом String (для начала) и возврашающего результат типа boolean ?

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

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

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

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


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

Вот как можно > 2 недель мучаться с Java и до сих пор не домучится, что

Метод называется contains
Один параметр с типом String (какое данному параметру дадим имя?)
Возврашает boolean

Как должна выглядить строка с описанием/декларацией данного метода?"


public boolean contains( String text )

Вот на мой взгляд, это так же элементарно, как 2+2. Где отдельные слова обозначают:

public - область видимости, паблик метод доступен из других классов
boolean - тип возврашаемый методом, вроде, то что он boolean, уже договорились
contains - имя метода
( - открывающая круглая скобка (внутри пойдет описание параметров через запятую)
String - тип параметра, то что он один и с типом String, уже договорились
text - имя параметра
) - закрывающая круглая скобка

Вот вопрос, что из этого Вам НЕ понятно ? что вызывает сложности ?

Почему вместо такого (или похожего) описания/декларации метода у Вас внезапно получилось

public boolean contains(List<Node<T>>)

лично мне, не понятно совершенно (((
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693940
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку в классе Tree или Node и так уже есть список детей, и он находится в поле класса children, то передавать его параметром не нужно.

Т.е. описание метода становится:

Код: java
1.
2.
3.
public boolean contains( String text ) {
   return recurse( this.children, text );
}



В чем проблема ?

Да, раз у нас генерик/шаблон, то вместо String можно/нужно просто написать T.

p.s. Я весь день держался, что бы вымучить из nastyaa что-то осмысленное, но не сдержался. Рабочий день заканчивается, нужно домой идти. Пойду с горя напьюсь дешевым пивом Жигули ((( нормальных стаутов все равно в СПб фиг найдешь ((( В общем.... все не радует, жизнь не удалась (((
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39693941
Фотография просто трепло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaa,

возможно, "эта" информация поможет Вам найти ответ на вопрос
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694077
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

Тут?
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694079
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
имели ввиду вот так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
import java.util.List;


public class Tree<T> extends Node<T> {

    public Tree(T data) {

        super(data, null);
    }

    public boolean contains(T value) {
        return recurse();
    }

    private boolean recurse(T value) {
        return childrens.stream()
                .anyMatch(children -> children.data.equals(text) || children.children.size() > 0 && recurse(children.children, text));
    }

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

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

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

Попробую написать этот метод. Мне нужно до работы добраться.

С уважением, Валентин
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694100
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevpublic boolean contains( String text )

Вот на мой взгляд, это так же элементарно, как 2+2.


Не так элементарно, потому что можно получить неправильный результат, если в дереве есть несколько вершин с одинаковой меткой.


nastyaa return childrens.stream()
.anyMatch(children -> children.data.equals(text)

Кто-то подшутил над Настием. Это выражение - из Java Stream API, которое появилось только в JDK 8 и маловероятно, что его преподают на курсах. Так что является явной подсказкой.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694103
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partisan M,
Пожалуйста можете этот код переделать. Нужно contains из класса Node вырезать и вставить в класс Tree и сделать так чтобы он передавал T.
И запускалось в treePrint по коду
Код: java
1.
2.
boolean b1 = rootFolder.contains("Eminem");
        System.out.println(b1);



Вот мой код
Код: 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.
import java.util.ArrayList;

import java.util.List;


public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

   
    public Node<T> addChild(T nodeData) {
    	
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public boolean contains(List<Node<String>> childrens, String text) {
    return recurse(childrens, text);
}
 
private boolean recurse(List<Node<String>> childrens, String text) {
    return childrens.stream()
        .anyMatch(children -> children.data.equals(text) || children.children.size() > 0 && recurse(children.children, text));
}
 
 

    
    }

----------------------------------
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import javax.swing.tree.TreeNode;

import java.util.*;

public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture1 = picture.addChild("Picasso");
        picture1.addChild("P1");
        Node<String> picture2 = picture1.addChild("P2");
        picture2.addChild("P3");
        picture2.addChild("P3");

        printTree(rootFolder);
        System.out.println(rootFolder.contains(rootFolder.getChildren(), "Terminator"));
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
        
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694104
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partisan M,
а вот мой класс Tree здесь нужно написать contains
Код: java
1.
2.
3.
4.
5.
6.
7.
public class Tree<T> extends Node<T> {

    public Tree(T data) {
        
        super(data, null);
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694107
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

я буду ждать вас(
всю ночь не спала надо доделать задачу( пожалуйста спасите(
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694118
Фотография 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.
package tree;

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

public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;


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

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


    public Node<T> addChild(T nodeData) {

        Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }


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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

package tree;

import java.util.List;

public class Tree<T> extends Node<T> {

    public Tree(T data) {

        super(data, null);
    }

    public boolean contains(T value) {
        return recurse(iterate(), value);
    }

    private boolean recurse(List<Node<T>> children, T value) {
        return children.stream()
                .anyMatch(item -> item.getData().equals(value) || item.iterate().size() > 0 && recurse(item.iterate(), value));
    }
}

package tree;

public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture1 = picture.addChild("Picasso");
        picture1.addChild("P1");
        Node<String> picture2 = picture1.addChild("P2");
        picture2.addChild("P3");
        picture2.addChild("P3");

        printTree(rootFolder);
        System.out.println("Is picture.contains - " + rootFolder.contains("P2"));
    }

    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
    }
}



Результат:
авторRootFolder
Video
Terminator
Die Hard
Rocky
Music
Eminem
Picture
Picasso
P1
P2
P3
P3
Is picture.contains - true


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

Спасибо вам большое)
а вот так можно его запускать?
Код: java
1.
2.
boolean b1 = rootFolder.contains("Eminem");
        System.out.println(b1);
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694125
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

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

Спасибо вам большое)
а вот так можно его запускать?
Код: java
1.
2.
boolean b1 = rootFolder.contains("Eminem");
        System.out.println(b1);



Да, так можно запускать.

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

а все проверила) спасибо вам большооооое) вы мой спаситель)))

Ура, ура! Настя спасена. Задача решена!

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

Я написала метод equals для двух деревьев, но почему false выводит а не true
Код: 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.
RootFolder
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
      Do Vinci
      NN
        Cartoon
        Comics
RootFolder1
  Video
    Terminator
    Die Hard
    Rocky
  Music
    Eminem
  Picture
    Picasso
      Do Vinci
      NN
        Cartoon
        Comics
false
true
false




вот мой код
Код: 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.
public class TreePrint {

    public static void main(String[] args) {

        Tree<String> rootFolder = new Tree<>("RootFolder");

        Node<String> video = rootFolder.addChild("Video");
        Node<String> music = rootFolder.addChild("Music");
        Node<String> picture = rootFolder.addChild("Picture");

        video.addChild("Terminator");
        video.addChild("Die Hard");
        video.addChild("Rocky");
        music.addChild("Eminem");
        Node<String> picture01 = picture.addChild("Picasso");
        picture01.addChild("Do Vinci");
        Node<String> picture02 = picture01.addChild("NN");
        picture02.addChild("Cartoon");
        picture02.addChild("Comics");
        
         Tree2<String> rootFolder1 = new Tree2<>("RootFolder1");

        Node<String> video1 = rootFolder1.addChild("Video");
        Node<String> music1 = rootFolder1.addChild("Music");
        Node<String> picture1 = rootFolder1.addChild("Picture");

        video1.addChild("Terminator");
        video1.addChild("Die Hard");
        video1.addChild("Rocky");
        music1.addChild("Eminem");
        Node<String> picture001 = picture1.addChild("Picasso");
        picture001.addChild("Do Vinci");
        Node<String> picture002 = picture001.addChild("NN");
        picture002.addChild("Cartoon");
        picture002.addChild("Comics");
        
        
        printTree(rootFolder);
        printTree(rootFolder1);
       
        
        boolean b1 = rootFolder.contains("P0");
        System.out.println(b1);
        boolean b2 = rootFolder1.contains("Eminem");
        System.out.println(b2);
        
        System.out.println(rootFolder.equals(rootFolder1));
      
    }
    
    private static <T> void printTree(Node<T> node) {
        printTree(node, 0);
    }

    private static <T> void printTree(Node<T> node, int level) {
        printNode(node, level);
        if (node.getChildren() != null) {
            for (Node childNode : node.getChildren()) {
                printTree(childNode, level + 1);
            }
        }
    }

    private static <T> void printNode(Node<T> kid, int level) {

        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }

        System.out.println(kid.getData());
    }
}

-----------------------------------------------------
public class Node<T> {
    private T data;
    private final List<Node<T>> children = new ArrayList<>();
    private final Node<T> parent;

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

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

   
    public Node<T> addChild(T nodeData) {
    	
    	Node<T> newNode = new Node<T>( nodeData, this ); 
        children.add( newNode );
        return newNode;
    }

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

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

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

    public Node getParent() {
        return parent;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Node other = (Node) obj;
    if (children == null) {
        if (other.children != null)
            return false;
    } else if (!children.equals(other.children))
        return false;
    if (data == null) {
        if (other.data != null)
            return false;
    } else if (!data.equals(other.data))
        return false;
    return true;
}
}
        
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694332
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Я вот написала код но сказали что он не правильно работает( надо чтобы было рекурсивно
и его надо переместить в класс Tree.
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694337
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Я этот код написала
Сказали в классе tree
Код: 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.
public boolean equals(Object obj) { // этот код сохранился
        return isEquals(obj);
    }
    
    private boolean isEquals(Object obj){  // А этот мне изменить сделать рекурсивным и чтобы правильно работал
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Node other = (Node) obj;
        if (children == null) {
            if (other.children != null) {
                return false;
            }
        } else if (!children.equals(other.children)) {
            return false;
        }
        if (data == null) {
            if (other.data != null) {
                return false;
            }
        } else if (!data.equals(other.data)) {
            return false;
        }
        return true;
    }
}
...
Рейтинг: 0 / 0
Почему у меня выводит ошибку
    #39694765
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,

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


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