【问题标题】:Recursive method returns only null in Java递归方法在Java中仅返回null
【发布时间】:2014-06-12 03:30:32
【问题描述】:

我编写了一个递归方法,它应该返回一个适合特定课程的树节点。该方法效果很好,但它不返回值,而是只返回 null。 知道如何解决吗?这是代码:

private TrieNode<String,V> prefix_last_child(TrieNode<String,V> STN , String prefix) {
    if (prefix.equals("")) {
        return STN;
    }
    char[] preffixx = prefix.toCharArray();
    if (STN.getNexts().get(alphabet_place(preffixx[0])) == null) {
        return null;
    }
    if (!prefix.equals(""))
        prefix_last_child(STN.getNexts().get(alphabet_place(preffixx[0])), prefix.substring(1));
    return null;
}

【问题讨论】:

  • 这可能是因为 return null;在函数的末尾?您是否尝试逐步调试程序以获取少量输入?像一个节点,两个节点和三个节点?我想你会明白你做错了什么......
  • 您可以使用调试器自己调查此类问题。

标签: java recursion data-structures


【解决方案1】:

要写递归方法,替换

 if (!prefix.equals(""))
        prefix_last_child(STN.getNexts().get(alphabet_place(preffixx[0])), prefix.substring(1));

与 if (!prefix.equals("")) return prefix_last_child(STN.getNexts().get(alphabet_place(preffixx[0])), prefix.substring(1));

【讨论】:

  • 当通过代码片段回答时,请描述它是如何工作的以及它修复了什么。
【解决方案2】:

您只会从函数中返回 null 或常量 STN。甚至无法返回有意义/不固定的值。

【讨论】:

  • STN OP 所追求的有意义的值。
【解决方案3】:

您的代码非常接近正常工作。问题来了:

if (!prefix.equals(""))
    // You make a recursive invocation, and then...
    prefix_last_child(STN.getNexts().get(alphabet_place(preffixx[0])), prefix.substring(1));
// ...ignore its return value, and return null instead!
return null;

替换为

if (!prefix.equals(""))
    return prefix_last_child(STN.getNexts().get(alphabet_place(preffixx[0])), prefix.substring(1));
//  ^^^^^^
return null;

解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2014-12-16
    • 2014-09-10
    相关资源
    最近更新 更多