Java сравнивает созданный связанный список - PullRequest
0 голосов
/ 02 июля 2019

Я перебираю основы создания связанного списка и мне нужно выяснить, равны ли эти два до и после замены.Замена работает должным образом, так как в моем основном методе есть операторы print для проверки, но я как-то не правильно сравниваю эти два после замены.Проблема в моем методе равных.

    public boolean replace(int index, Object newEntry) {
        boolean isSuccessful = true;
        Node nodeToReplace = getNode(index);
        getNode(index).data = newEntry;

        if(newEntry == nodeToReplace){
            isSuccessful = false;
        }
        return isSuccessful;
    } // end replace
    /** Task: Determines whether two lists are equal.
     * @param other object that contains the other linked list
     * @return true if two lists have the same length and all
     * entries are equal, or false if not */
    public boolean equals(Object other) {
        MyLinkedList aList = (MyLinkedList)other;
        boolean isEqual = true; // result of comparison of lists
        Node currentNode = firstNode;
        Node aListNode = firstNode;

        while ((currentNode != null)){
            if (currentNode.data == aListNode.data) {
                currentNode = currentNode.next;
                aListNode = aListNode.next;
            }
            else
                isEqual = false;
        }
        return isEqual;
    } // end equals
    public int getLength() {
        return length;
    }
    public boolean isEmpty() {
        return length == 0;
    }

    // @return an string with all entries in the list
    public String toString() {
        Node currentNode = firstNode;
        String s = new String();
        while (currentNode != null) {
            s += currentNode.data + " ";
            currentNode = currentNode.next;
        }
        return s;
    }
    private Node getNode(int index) {
        Node currentNode = firstNode;
        // traverse the list to locate the desired node
        for (int counter = 0; counter < index; counter++)
            currentNode = currentNode.next;
        return currentNode;
    } // end getNode
    private class Node {
        private Object data; // data portion
        private Node next; // link to next node

        private Node(Object dataPortion) {
            data = dataPortion;
            next = null;
        } // end constructor
        private Node(Object dataPortion, Node nextNode) {
            data = dataPortion;
            next = nextNode;
        } // end constructor
        private void setData(Object dataPortion) {
            data = dataPortion;
        } // end setData
        private Object getData() {
            return data;
        } // end getData
        private void setNextNode(Node nextNode) {
            next = nextNode;
        } // end setNextNode
        private Node getNextNode() {
            return next;
        } // end getNextNode
    } // end Node

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Всегда ли они говорят, что они равны?

Вы инициализируете currentNode и aListNode одним и тем же узлом:

Node currentNode = firstNode;
Node aListNode = firstNode;

Возможно, вы хотите это:

Node currentNode = firstNode;
Node aListNode = aList.firstNode;

Как только вы это исправите, вы обнаружите, что он работает вечно.Вам следует return false как только вы поймете, что два списка не равны.Тогда вы можете избавиться от isEqual.Прямо сейчас вы устанавливаете isEqual в false, но вы никогда не выходите из цикла.

1 голос
/ 02 июля 2019

В вашей функции equals вы запускаете currentNode и aListNode в одном месте.

Я полагаю, что вы хотите инициализировать currentNode старым списком и aListNode новым, или наоборот, чтобы сравнить их оба, иначе вы всегда получите истинный результат от функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...