java - 正确设置指针

标签 java

我正在尝试修复我的方法,我应该采用用户输入节点,然后显示从用户输入到目标节点所需的移动。在该方法中,answer代表目标节点。所以我的方法是,虽然答案有一个父级,但您显示它,然后继续这种方式,但我的方法没有按预期工作。

例如,如果答案(目标)是 7 并且用户输入了 5,我希望此方法先说 6,然后是 7,因为这些是从输入到实现目标所采取的步骤。然而我的方法打印出 6 然后 5。它将得到第一步,然后回溯到我的输入。我确信这是指针的问题,但我似乎无法弄清楚。

     while(answer.getParent() != null){
        System.out.print(answer.getParent());
        answer = answer.getParent();

最佳答案

您可以使用堆栈,可以是您定义的堆栈,也可以是调用堆栈。要使用调用堆栈,您需要递归地编写代码。使用用户定义的stack ,你会做类似的事情

Deque<String> steps = new ArrayDeque<>();
while (answer.getParent() != null) {
    steps.addFirst(answer.toString());
    answer = answer.getParent();
}

while (!steps.isEmpty()) {
    System.out.println(steps.removeFirst());
}

您还可以使堆栈与 answer.getParent() 返回的类型相同,并省略 toString。但我不知道类型,所以我没有尝试这样做。

递归方法看起来像

public void displayPath(Node answer) {
    if (answer.getParent() == null) {
        return;
    }

    displayPath(answer.getParent());

    System.out.println(answer);
}

我将该类型称为Node。这可能是错误的,因为我不知道正确的类型是什么。我只是猜测。根据需要更换。

请注意,您必须在递归调用之后进行输出,以便在返回调用堆栈时打印它。如果你把它放在前面,它将以相反的顺序打印。

简而言之,您的代码以相反的顺序生成列表。所以你必须以相反的顺序显示。我认为在这里谈论指针会使问题变得困惑。你正在从 child 攀登到 parent 。所以你的输出首先是 child ,然后是 parent 。但是,如果您的节点可以有多个子节点,则必须将子节点爬到父节点。或者您最终会搜索整个树,但仍然需要存储您的路径。

关于java - 正确设置指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610761/

相关文章:

java - Cucumber 场景按顺序运行

java - 无法对以下 TreeMap 进行排序

java - 连接Java和Teradata : The UserId, 密码或账号无效

java - 为什么 `%4.` 在我的号码中添加空格?

java - 无法禁用 EditText 且分数变量不更新

java - 找到由其他单词组成的最长单词

java - 将命令行参数传递给在 Docker 中运行的 Java 应用程序 (Spring Boot)

java - 通过不在 java 中工作来排序

java - 在 Jhipster 中添加到数据库的新连接

java - 用Java发送/接收电子邮件