Путешествие по дереву при увеличении поля - статическая проблема - PullRequest
0 голосов
/ 31 мая 2011

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

Вот мой код:

private double time = 0;

..............
..............
..............

public static double time(TreeNode<City> tree{
    City A = tree.getCity();
    if (tree.hasLeftChild()){
        time += tree.getLeftChild().getCity().distance(A);
        time(tree.getLeftChild());
    }
    if (tree.hasNextSibling()){
        time += tree.getNextSibling().getCity().distance(A);
        time(tree.getNextSibling());
    }
    return time;

}

Я хочурассчитать общее время путешествия по дереву.Тем не менее, есть одна большая проблема: поле с именем time должно быть статическим, чтобы я мог использовать его в моих статических методах.Однако, когда он статичен, программа всегда возвращает 0. Как мне внести изменения, чтобы рассчитать общее время прохождения дерева ???

Приветствия.

1 Ответ

0 голосов
/ 31 мая 2011

Не вдаваясь в детали атрибутов переменных, я просто отмечу, что вы написали рекурсивную функцию, которая возвращает переменную.Я предлагаю вам на самом деле использовать этот возврат и делать все необходимое, чтобы присвоить значение в конце.Что-то вроде

public static double time(TreeNode<City> tree{
    double thistime = 0.0;
    City A = tree.getCity();
    if (tree.hasLeftChild()){
        thistime += tree.getLeftChild().getCity().distance(A);
        thistime += time(tree.getLeftChild());
    }
    if (tree.hasNextSibling()){
        thistime += tree.getNextSibling().getCity().distance(A);
        thistime += time(tree.getNextSibling());
    }
    return thistime;
}

Затем, когда вы его вызываете;

time = time(root);
printf("Time is %f, actual time should be %f\n",time,time(root));

В конце printf просто помогает выяснить, есть ли какая-то проблема назначения атрибута по сравнению с ошибкой вфункция против чего-то еще.

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

Я отмечу в вашем примере кода, что вы явно пропускаете близкого родителя вопределение функции.

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