powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Рекурсия
43 сообщений из 43, показаны все 2 страниц
Рекурсия
    #39689436
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.
package tree;
 
class Main {
 
    public static void main(String[] args) {
        TreeNode<String> treeRoot = getSet1();
        
        printTree(treeRoot);
        
        /*for (TreeNode<String> node : treeRoot) {
            String indent = createIndent(node.getLevel());
            System.out.println(indent + node.data);
        }*/
    }
 
    public static void printTree(TreeNode<String> tree) {
 
????????????????????????????????????????????????????????? - как здесь написать рекурсию 
        
    }
    
    private static String createIndent(int depth) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            sb.append(' ');
        }
        return sb.toString();
    }
 
    public static TreeNode<String> getSet1() {
        TreeNode<String> root = new TreeNode<>("root");
 
        TreeNode<String> node0 = root.addChild("Video");
        TreeNode<String> node1 = root.addChild("Music");
        TreeNode<String> node2 = root.addChild("Pictures");
 
        TreeNode<String> node00 = node0.addChild("Terminator");
        TreeNode<String> node01 = node0.addChild("Batman");
        TreeNode<String> node02 = node0.addChild("Harry Potter");
        TreeNode<String> node03 = node1.addChild("Kendrick Lamar");
        TreeNode<String> node04 = node1.addChild("Oxxxymiron");
        TreeNode<String> node05 = node1.addChild("Lana Del Rey");
        TreeNode<String> node06 = node2.addChild("Comics");
        TreeNode<String> node07 = node2.addChild("Mona Lisa");
        TreeNode<String> node08 = node2.addChild("Picasso");
        
        
        TreeNode<String> node09 = node08.addChild("Picasso1");
        TreeNode<String> node10 = node08.addChild("Picasso2");
 
        return root;
 
    }
}
...
Рейтинг: 0 / 0
Рекурсия
    #39689734
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что в рекурсии делать-то нужно?
Понятно, что нужно выводить на печать, но ведь тогда надо изменять дерево, а именно удалять елементы, которые мы "распечатали", чтобы при повторном вызове этого же метода у нас всё не зациклилось.
Вот и думайте исходя из задачи.
Нужно проверить если нода имеет чайлд, то взять этот чайлд и проверить его на наличие чайлд, если нет, то напечатать эту ноду и удалить. Далее снова тут же после удаления вызвать printTree с уже измененным методом.
Ну это так, мысли. Не решал подобных задач ранее.
...
Рейтинг: 0 / 0
Рекурсия
    #39689813
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать надо обход дерева в естественном порядке, то есть обход дерева в глубину (иначе у дяди преподавателя не возникло бы желание потребовать применения рекурсии). Обход в глубину - когда после узла указывается сначала непосредственно нижестоящий. Обход в ширину - когда указываются узлы одного уровня, потом более низкого итп. Обход в глубину с помощью онкурсии запрограммировать легче, чем с помощью итерации.
...
Рейтинг: 0 / 0
Рекурсия
    #39689877
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без класса TreeNode<String> здесь делать нечего.

Если это стандартный класс

https://docs.oracle.com/middleware/1212/wls/WLCAR/com/bea/jsptools/tree/TreeNode.html

То там все строится на том, что рекурсия прекращается если метод List getChildren() возращает пустой список.

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

import tree.Tree.Node;

public class Main {

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

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

package tree;

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

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

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

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

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

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

        public T getData() {
            return data;
        }

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

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

    }

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

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

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

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

    public List<Node<T>> findByName(final String name) {
        final List<Node<T>> result = new ArrayList<>();
        final Queue<Node<T>> allFiles = new LinkedList<>();
        allFiles.add(getNode());
        while (!allFiles.isEmpty()) {
            final Node<T> localEntry = allFiles.poll();
            final List<Node<T>> files = localEntry.iterate();
            for (final Node<T> innerFile : files) {
                if (innerFile.getData().equals(name)) {
                    result.add(innerFile);
                }
                allFiles.add(innerFile);
            }
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
Рекурсия
    #39690054
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSergunka,
как зздесь написать рекурсию, пожалуйста, помогите

Настя,

Если Вы нуждаетесь в помощи, то, пожалуйста, сформулируйте, что именно надо сделать. Пока у нас тут два разных куска неработающего кода. Опубликуйте все задание, пожалуйста.

Навскидку если Вам надо распечатать весь каталог фильмов из последнего примера, то код будет выгдядеть примерно так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	private static <T> void printCatalog(Tree<T> rootFolder) {
		
		 printNode(rootFolder.getNode());
		 List<Node<T>> kids = rootFolder.iterate();
		 if (kids.isEmpty()) return;
		 for (Node<T> kid:kids) {
			printNode(kid);
			printCatalog (rootFolder.findByName(kid.data).get(0).getRoot());
		 }
	}

	private static <T> void printNode(Node<T> kid) {
		 System.out.println(kid.getData());
		
	}
...
Рейтинг: 0 / 0
Рекурсия
    #39690061
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем могучим напряжением ума (сходил помыл посуду )

вот работающий код:

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

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


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

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

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

	}

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

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


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

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


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

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

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

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

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



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

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

public class Node<T> {

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

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

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

        public T getData() {
            return data;
        }

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

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

    }



Печатает так

RootFolder
Video
Terminator
Die Hard
Rocky
Music
Abba
Picture
Home picture
Work picture
...
Рейтинг: 0 / 0
Рекурсия
    #39690081
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чтоб уж совсем не было стремно, напечатаем дерево с отступлениями, чтоб было понятно уровни вложения

Код: 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.getNode(), "");
		 List<Node<T>> kids = rootFolder.iterate();
		 printKids(kids, " ");

	}

	private static <T> void printKids(List<Node<T>> kids, String space) {
		if (!kids.isEmpty()) {
			for (Node<T> kid : kids) {
				printNode(kid, space);
				printKids(kid.children, space + " ");
			}
		}
	}

	private static <T> void printNode(Node<T> kid, String space) {
		 System.out.println(space+kid.getData());
		
	}
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
RootFolder
 Video
  Terminator
  Die Hard
  Rocky
 Music
  Abba
 Picture
  Home picture
  Work picture
...
Рейтинг: 0 / 0
Рекурсия
    #39690139
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

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

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

Можно спросить а где находится рекурсия в вашем коде?

Настя,

я давно не видел такого тонкого стеба Вы просто сделали мой день

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	private static <T> void printKids(List<Node<T>> kids, String space) {
		if (!kids.isEmpty()) {
			for (Node<T> kid : kids) {
				printNode(kid, space);
				printKids(kid.children, space + " ");
			}
		}
	}



В данном учатске кода метод printKids вызывает сам себя в виде printKids(kid.children, space + " "); , что на языке математической логики называется рекурсивный вызов.

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

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

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

простите просто я только 3 неделю учусь JAVA( если буду тупить простите))))

Для трех недель Вы реально хорошо продвинулись. К слову сказать неплохо учат где если не секрет?
...
Рейтинг: 0 / 0
Рекурсия
    #39690155
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

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

Мне сказали чтобы в классе реализации были спрятаны, и чтобы только класс Tree мог ссылаться на класс Node (только в классе Нод должны быть все функции) и плюс надо добавить getChilder и getParent и addChild чтобы возвращались. Можете помочь я просто запуталась и голова кругом((

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

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


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

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

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

	}

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

	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.
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.
/*
 * 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 treeadil;

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

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

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


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

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

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

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

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




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

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

public class Node<T> {

    private T data;
    private Node<T> parent;
    private List<Node<T>> children;

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

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

    public T getData() {
        return data;
    }

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

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

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

}
...
Рейтинг: 0 / 0
Рекурсия
    #39690158
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSergunka,
я хожу на курсы, правда я единственная девушка в группе(
и пацаны толком не помогают если что то не знаю. Каждый сам за себя. Вот я чтобы что то понять листаю книги, шарюсь в интернете и на форумах.
Так практически во всех компаниях)) По крайней мере в первый 1-2 месяца. Так что готовьтесь к этому, когда устроитесь на работу.
У нас, к примеру, есть всего 2-3 человека из 40-ка, кто может помочь с чем-то, с чем еще не работал, это очень грустно, особенно в самом начале работы. Никто не хочет тратить своё время на новичков, когда они начинают тупить))
Но есть отличные люди, которые не, поправляя на голове корону, отвечают общими фразами, а реально объясняют, что именно прочитать, чтобы решить вопрос и понять как именно должно работать. Ну и плюс, можно решить через руководство, объяснив ситуацию, почему не можешь закрыть задачу, попросить через руководителя выделить время человека опытнее в помошь.
Но это только по началу, потом всё становится стандартным и решаемым.
А про учебу, думаю, что через какое-то время выделиться/создасться у вас небольшая компашка и будете совместно решать задачи. Видимо у вас(да и не только у вас) большинство молодых парней стесняются девушек))
...
Рейтинг: 0 / 0
Рекурсия
    #39690161
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nixic,

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

Вот посмотрите как реализован классический Node на стек оверфло

https://stackoverflow.com/questions/19330731/tree-implementation-in-java-root-parents-and-children

Это походу, что из Вас инструктор вымучивает

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

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

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

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

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

    public void setParent(Node<T> parent) {
        parent.addChild(this);
        this.parent = parent;
    }

    public void addChild(T data) {
        Node<T> child = new Node<T>(data);
        child.setParent(this);
        this.children.add(child);
    }

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

    public T getData() {
        return this.data;
    }

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

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

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

    public void removeParent() {
        this.parent = null;
    }
}
...
Рейтинг: 0 / 0
Рекурсия
    #39690173
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

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

этот код будет работать? в моем случае?

Сложно сказать какой у Вас случай так как я не вижу задания. И к сожалению свой crustal ball я забыл на работе, чтоб точно предсказать подойдет этот класс Вам или не подойдет

На самом деле Вам надо будет сделать рефакторинг если там, что не так. А так посмотрите какие методы инструктор от Вас хочет и возьмите их из этого класса и положите в свой.

Поймите правильно инструктор тоже человек и вмеру ленив как мы все. Вы в этом плане не исключение так, что скорее всего инструктор так же ндыбал это задание на том же стековерфло и Ваша задача проявить некие навыки в духе Окей Гугл и найти правильный код....

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

Он сказал что ваш код переделать, просто чтобы все функции были только в Node. А класс Tree лишь ссылался на Node. и плюс getchild и getparetn и addchild были все( можете пожалуйста помочь вы моя последняя надежда)
...
Рейтинг: 0 / 0
Рекурсия
    #39690197
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaSergunka,

Он сказал что ваш код переделать, просто чтобы все функции были только в Node. А класс Tree лишь ссылался на Node. и плюс getchild и getparetn и addchild были все( можете пожалуйста помочь вы моя последняя надежда)

Настя,

У нас в Калифорнии уже глубокая ночь. Завтра если мне на работе повезет и я сделаю быстро, что запланировал, то напишу Вам код. Но лучше будет если Вы всеж сама смекнете как там чего делать надо, там ничего особенного нет тем более образец из стек оверфло у Вас под рукой.
...
Рейтинг: 0 / 0
Рекурсия
    #39690204
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

Ок спасибо) буду ждать но а пока сама попробую сделать)
...
Рейтинг: 0 / 0
Рекурсия
    #39690308
shaden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,
Проблема в том, что Вы не учитесь.
Вы просите других выполнить за Вас задачу. И толку от таких курсов будет около нуля.
...
Рейтинг: 0 / 0
Рекурсия
    #39690334
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shaden,
я вот сама написала
Код: 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.
package treeadil;

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

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

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

    public void addChild(Node child) { // как здесь инициализацию сделать
        child.setParent(this);
        this.children.add(child);
    }

    public void addChild(T data) {
        Node<T> newChild = new Node<>(data);
        newChild.setParent(this);
        children.add(newChild);
    }

    public void addChildren(List<Node> children) {
        for(Node t : children) {
            t.setParent(this);
        }
        this.children.addAll(children);
    }

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

    public T getData() {
        return data;
    }

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

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

точнее с однокурсников сидим и делаем через его ноут

А может вы будете вести свои проект(ы) на github - заодно еще и git освоите
...
Рейтинг: 0 / 0
Рекурсия
    #39690630
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaashaden,
я вот сама написала
Код: 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.
package treeadil;

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

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

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

    public void addChild(Node child) { // как здесь инициализацию сделать
        child.setParent(this);
        this.children.add(child);
    }

    public void addChild(T data) {
        Node<T> newChild = new Node<>(data);
        newChild.setParent(this);
        children.add(newChild);
    }

    public void addChildren(List<Node> children) {
        for(Node t : children) {
            t.setParent(this);
        }
        this.children.addAll(children);
    }

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

    public T getData() {
        return data;
    }

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



Как вы там пишите? У вас же ошибки синтаксиса - я вот к примеру setParent метода не вижу

P.S. Заведите гитхаб действительно
...
Рейтинг: 0 / 0
Рекурсия
    #39690703
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xdsnastyaanastyaa,

точнее с однокурсников сидим и делаем через его ноут

А может вы будете вести свои проект(ы) на github - заодно еще и git освоите

+1

На самом деле данная задача настолько классическая, что грех не имплементировать на гитхабе. Я собственно на, что и купился помочь "Насте с другом" так как из последних, наверно, интервью штук 50 я не припомню, чтоб не спросили как распечатать дерево . Даже помнится лет шесть назад в Гугле спрашивали - я мыслено поржал и написал
...
Рейтинг: 0 / 0
Рекурсия
    #39690727
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaточнее с однокурсников сидим и делаем через его ноутзначит не так всё плохо в группе...
...
Рейтинг: 0 / 0
Рекурсия
    #39690749
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяnastyaaточнее с однокурсников сидим и делаем через его ноутзначит не так всё плохо в группе...

На самом деле, чем девушка больше косит под "блондинко" тем внешние данные у нее потрясающие годы проведенные в ИТ научили меня ценить человеческий материал

Жизнь среди коллег-батонов скучна и однообразна бывают исключения когда редкая птаха залетит в опен спейс и носится как "по сараю воробей"

Прямо как четвертое действие в чеховском "Дяде Ване"

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

нет, просто они сам не смог сделать, и меня просил помочь сделать. Просто я что то у них прошу, они всегда отмазываются. А когда у них что то не получаются сразу же ко мне идут. Да знаю местами глуплю, но поймите я постепенно все понимаю, не надо думать обо мне плохо
...
Рейтинг: 0 / 0
Рекурсия
    #39691585
shaden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, это нормальный подход: взять ник девочки и писать тексты вида: "мимими-сюсюсю, памагите бландиначке позязя, аа?"
Кто-то полюбому поведется и сделает - у чувака курсовой в кармане. Дальше так же и диплом.
И на работу даже возьмут, щас на джавистов и сочувствующих им большой спрос.
...
Рейтинг: 0 / 0
Рекурсия
    #39691593
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shaden,

я давно закончила учебу(
просто записали родители на курсы
...
Рейтинг: 0 / 0
Рекурсия
    #39691594
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shaden,
не подскажите почему у меня ошибка
http://www.sql.ru/forum/1301394/pochemu-u-menya-vyvodit-oshibku
...
Рейтинг: 0 / 0
Рекурсия
    #39691595
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
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
Рекурсия
    #39691728
shaden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,

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

Подскажу.
По ставке 20000 рублей за рабочий день.

Я подскажу бесплатно.

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

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

import java.util.List;

import tree.Tree.Node;

public class TreePrint {

    public static void main(String[] args) {

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

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

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

        printCatalog(rootFolder);
    }

    private static <T> void printCatalog(Tree<T> tree) {
        printNode(tree.getNode());
        List<Node<T>> kids = tree.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.iterate());
        }
    }

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

    }
}

package tree;

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

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

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

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

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

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

        public T getData() {
            return data;
        }

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

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

    }

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

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

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

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

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



Выводит такой текст:

авторRootFolder
Video
Terminator
Die Hard
Rocky
Music
Eminem
Picture
Picasso


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

Спасибо вам большое сейчас буду тестировать вашу программу)

кстати я написала код сказали некоторые места изменить. В моем коде только до терминатора можно добавлять узлы, а как сделать так чтобы терминатор мог добавить узлы и там были Сара Коннер, Щварцнегер, т-800 и потом дальше можно было и Саре Коннер тоже добавить узлы и тд (чтобы бесконечно как наследование)

http://www.sql.ru/forum/1301450/napisala-kod-no-vyvodit-po-drugomu
...
Рейтинг: 0 / 0
Рекурсия
    #39694521
xds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xds
Гость
nastyaa,

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


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