Возможная логическая ошибка при создании пользовательской структуры данных List - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать пользовательскую структуру данных, наиболее похожую на список, для назначения.Я сделал класс Node:

 class Node {   
  int data;  
  Node nextNode = null; 

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

и класс DataStructure:

public class DataStructure {
    private Node previousNode;
    private Node StartingNode;
    private boolean isEmpty = true;

    public void AddNode(int data) {
        if(isEmpty) {
            isEmpty = false;
            StartingNode = new Node(data);
            previousNode = StartingNode;
        }
        else {
            previousNode.nextNode = new Node(data);
            previousNode = previousNode.nextNode;
        }
    }

    private boolean isFirst = true;
    int max = 0;
    public int getMaxData(Node d) {
        if(isFirst) {
            isFirst = false;
            max = d.data;
        }
        else {
            if(d.data > max)
                max = d.data;
            if(d.nextNode != null)
                getMaxData(d.nextNode);
        }
        return max;
    }
}

Когда я пытаюсь запустить пример выше, список создается неправильно (из того, что ямогу сказать).Я думал, что, возможно, это как-то связано с сборкой мусора, но я считаю, что объекты узла все еще активны, так как на них ссылается переменная nextNode.

Это основной метод, который запускает пример:

public static void main(String [] args) {
        DataStructure list = new DataStructure();
        list.AddNode(5);
        list.AddNode(15);
        list.AddNode(12);
        list.AddNode(3);        

        System.out.println(list.getMaxData(list.StartingNode));
    }

Ожидаемый результат - число 15, которое будет напечатано, но я получаю только первый узел (5).Я попытался «отладить», добавив System.out.writeln (d.data) в начале getMaxData (), и я напечатал только 5, поэтому я считаю, что другие узлы не созданы.

1 Ответ

1 голос
/ 04 апреля 2019

Эта проблема заключается в следующем:

if(isFirst) {
    isFirst = false;
    max = d.data;
} else {...}

If всегда будет происходить для первого элемента, а затем вы просто возвращаете это значение. Вы можете сделать это только с помощью предложения else:

public int getMaxData(Node d) {
    if (d.data > max)
        max = d.data;
    if (d.nextNode != null)
        return getMaxData(d.nextNode);
    return max;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...