gpt4 book ai didi

java - 我的 else 语句中的代码已死,我不相信这是真的(java)?

转载 作者:行者123 更新时间:2023-12-02 09:01:27 24 4
gpt4 key购买 nike

我正在我的 java 代码中使用有组织的 BST。这个函数/方法应该在树中搜索具有特定值的节点,并让用户知道它是否存在。

    void search(int item, Node root, int r, int c) {

//if the integer is found
if(root.val == item) {
System.out.println("integer located at row: " + r + " & child: " + c + "\n");
}

//if the integer is not found (use the closest value to find it)
else if(root != null) {
if(item < root.val)
search(item, root.left, r + 1, (c * 2) - 1);
else
search(item, root.right, r + 1, c * 2);
}

//if the root is a null (it doesn't exist or cannot be found)
else {
System.out.println("integer cannot be located\n");
}
}

问题出在最后的else语句上。我的编译器说 else 语句中的任何内容都是死代码,这意味着它没有被使用。但是,如果函数确实遇到 null 并且无法找到具有指定值的节点,我需要 else 语句中的代码。如果我将第二个 else 语句更改为 else if(root.val != item && root != null) ,它就会消失,但它让我想知道是否存在 root 不等于的点null 我知道这应该是一种可能性。 else 语句真的是死代码吗?如果是,我该如何更改它?

最佳答案

这是死代码,因为 root 的取消引用在root.val要求 root 为非 null 。如果是null你会得到一个NullPointerException .

在我的 IDE 中这是一个警告;代码在语法上是正确的,但从语义上来说,最终的 else永远不会被输入。

要解决此问题,请检查 nullif首先声明:

void search(int item, Node root, int r, int c) {
if (root == null) {
// if the root is a null (it doesn't exist or cannot be found)

System.out.println("integer cannot be located\n");
} else if (root.val == item) {
// if the integer is found

System.out.println("integer located at row: " + r + " & child: " + c + "\n");
} else if (item < root.val) {
// if the integer is not found (use the closest value to the left to find it)

search(item, root.left, r + 1, (c * 2) - 1);
} else {
// if the integer is not found (use the closest value to the right find it)

search(item, root.right, r + 1, c * 2);
}
}

请注意,您也许可以更改前两个 if以直接返回或停止方法执行的方式。然后检查item < root.val不必在 else 内堵塞。你越浅if语句越好(但始终为每个 block 使用大括号!)。

关于java - 我的 else 语句中的代码已死,我不相信这是真的(java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60131609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com