我的 else 语句中的代码已死,我不相信这是真的 (java)?
the code in my else statement is dead and I don't believe it is true (java)?
我在 java 代码中使用有组织的 BST。 function/method 应该在树中搜索具有特定值的节点,并让用户知道它是否存在。
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 语句真的是死代码吗?如果是,我该如何更改它?
你的第一个 if
表达:
if (root.val == item)
如果 root
是 null
, 将抛出 NullPointerException
,否则将执行比较。因此,最终的 else
块永远无法执行。
您可以尝试重新订购您的代码:
void search(int item, Node root, int r, int c) {
if (root != null) {
if (root.val == item) {
System.out.println("integer located at row: " + r + " & child: " + c + "\n");
} else if (item < root.val) {
search(item, root.left, r + 1, (c * 2) - 1);
} else {
search(item, root.right, r + 1, c * 2);
}
} else {
System.out.println("integer cannot be located\n");
}
}
它是死代码,因为 root.val
中对 root
的取消引用要求 root 不是 null
。如果是 null
你会得到 NullPointerException
.
在我的 IDE 中,这是一个警告;该代码在语法上是正确的,但从语义上讲,最终的 else
将永远不会被输入。
要解决此问题,请先检查 if
语句中的 null
:
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
,使其直接 return 或停止执行该方法。然后检查 item < root.val
不必在 else
块内。 if
语句越浅越好(但始终对每个块使用大括号!)。
我在 java 代码中使用有组织的 BST。 function/method 应该在树中搜索具有特定值的节点,并让用户知道它是否存在。
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 语句真的是死代码吗?如果是,我该如何更改它?
你的第一个 if
表达:
if (root.val == item)
如果 root
是 null
, 将抛出 NullPointerException
,否则将执行比较。因此,最终的 else
块永远无法执行。
您可以尝试重新订购您的代码:
void search(int item, Node root, int r, int c) {
if (root != null) {
if (root.val == item) {
System.out.println("integer located at row: " + r + " & child: " + c + "\n");
} else if (item < root.val) {
search(item, root.left, r + 1, (c * 2) - 1);
} else {
search(item, root.right, r + 1, c * 2);
}
} else {
System.out.println("integer cannot be located\n");
}
}
它是死代码,因为 root.val
中对 root
的取消引用要求 root 不是 null
。如果是 null
你会得到 NullPointerException
.
在我的 IDE 中,这是一个警告;该代码在语法上是正确的,但从语义上讲,最终的 else
将永远不会被输入。
要解决此问题,请先检查 if
语句中的 null
:
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
,使其直接 return 或停止执行该方法。然后检查 item < root.val
不必在 else
块内。 if
语句越浅越好(但始终对每个块使用大括号!)。