Java我的方法return语句不是破解方法

时间:2017-12-02 01:38:51

标签: java

public int at(int i) {
    BNode current = storage.root;
    return traverse(i, current);
}

public int traverse (int i, BNode root){ // Each child of a tree is a root of its subtree.
  if (root.left != null) {
     traverse(i, root.left);
  }
  if (root.right != null) {
     traverse(i, root.right);
  }
  if(root.index == i) {
     System.out.println(root.value);
     return 1;
  }
  return -1;
}

这只是代码的一部分,当我运行时,System.out.println(root.value)行正确执行并打印值,但它不返回1而是返回-1,这给了我一个头痛。 方法应该在print语句返回1之后退出,但是如何继续第二个return语句...我有一个任务在几个小时内到期,我觉得这个方法搞砸了我大声笑

5 个答案:

答案 0 :(得分:1)

那是因为您没有返回从左/右节点返回的结果:

/path/to/dark.css

答案 1 :(得分:0)

想象一下这棵树:

[^0-9]

让我们看看该计划将会做些什么:

首先调用bc-01-ddd abc-12-ddd abc-03-ddd abs-05-ddd 没有左侧节点,因此它继续前进 有一个正确的节点,因此它在右侧节点上调用 0:N1 \ 1:N2 没有左侧节点,因此它继续前进 没有正确的节点,所以它继续前进 索引等于节点索引,因此返回1.
现在让我们缩小回第一个电话 索引不等于节点索引,因此它继续前进 它返回-1。

试试这个:

transverse(1, tree)

答案 2 :(得分:0)

您没有从这些递归调用返回值,因此当这两个递归调用中的一个变为" true"为:

H1 = hist(dat, breaks=16, xaxt="n")
axis(side=1, at=H1$breaks, labels=paste0(100*H1$breaks, "%"))

递归方法将返回1但在原始调用方法中将被忽略。

答案 3 :(得分:0)

您的关键问题是忽略traverse的返回值。最好先评估自己的节点,这样就不会浪费不必要地遍历子节点。

public int traverse(int i, BNode root) {
    // Check self first so you don't waste effort traversing child nodes
    if (root.index == i) {
        System.out.println(root.value);
        return 1;
    }
    // If any child returns 1, we return 1
    if ((root.left != null) && (traverse(i, root.left)==1)) {
        return 1;
    }
    if ((root.right != null) && (traverse(i, root.right)==1)) {
        return 1;
    }
    // If neither child nor self returns 1, we return -1
    return -1;
}

答案 4 :(得分:-1)

你总是可以将var设置为-1,当它到达第三个时,如果它只是更改了var然后返回var,因为我不相信if语句中的Return语句将起作用。但是我有一段时间没有做过Java,所以我不是百分之百确定只是尝试一下。