Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2018, 06:11   #1
Nastya2018
Форумчанин
 
Регистрация: 24.07.2018
Сообщений: 133
По умолчанию Equals двух деревьев

Гайс я написала метод equals но он не работает рекурсивно и выводит только false. Как можно исправить ошибку в коде

Код:
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<>("RootFolder");
 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());
    }
}
Код:
ublic 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));
    }
 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;
    }
Код:
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;
    }
Nastya2018 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему выводит ошибку в equals Nastya2018 Общие вопросы по Java, Java SE, Kotlin 50 07.08.2018 14:38
Equals и GetHashCode и их переопределение? BadCats C# (си шарп) 1 02.11.2016 14:47
Gethashcode vs equals ts-alan Общие вопросы .NET 14 04.04.2014 11:07
equals Русtam Общие вопросы по Java, Java SE, Kotlin 2 01.10.2012 17:37
equals!!! grimm_jow Общие вопросы по Java, Java SE, Kotlin 5 13.06.2010 13:45