我在练习二进制搜索树。当我写这段代码时,intellij抛出警告:'x'可能不应该被分配给'y'
。为什么会发生这种情况,我该如何解决?
我假设先给y赋值null可能需要对警告做些什么。但是我不确定。
@Setter
@Getter
public class BinarySearchTree {
private Node root;
public Node treeInsert(Node z) {
Node x = root;
Node y = null;
while (x != null) {
y = x; // warning shows in this line
if (z.key > x.key) x = x.right;
else x = x.left;
}
z.parent = y;
if (y != null) {
if (z.key > y.key) y.right = z;
else y.left = z;
}
return z;
}
@Setter
@Getter
private class Node {
private int key;
private Node left;
private Node right;
private Node parent;
public Node(int key) {
this.key = key;
}
}
}
如果您查看检查说明:
报告目标变量或函数参数的名称与分配给它的值的名称不匹配的赋值和函数调用。
例1:
int x = 0;
int y = x; // x is used as a y-coordinate
例2:
int x = 0, y = 0;
// x is used as a y-coordinate and y as an x-coordinate
Rectangle rc = new Rectangle(y, x, 20, 20);
这种检查似乎将变量误认为x
和y
坐标,并警告您错误地将x坐标值指定给y坐标。
要解决这个问题,您应该为变量提供更好的名称:
public Node treeInsert(Node z) {
Node currentNode = root;
Node parentNode = null;
while (currentNode != null) {
parentNode = currentNode; // warning shows in this line
if (z.key > currentNode.key) currentNode = currentNode.right;
else currentNode = currentNode.left;
}
z.parent = parentNode;
if (parentNode != null) {
if (z.key > parentNode.key) parentNode.right = z;
else parentNode.left = z;
}
return z;
}
问题内容: 使用math.pow或**运算符哪个更有效?我什么时候应该使用另一个? 到目前为止,我知道可以返回一个或一个,如果您使用小数,该函数将返回一个浮点数 问题答案: 使用Power运算符将更快,因为它不会产生函数调用的开销。如果您反汇编Python代码,则可以看到以下内容: 请注意,我在这里使用变量作为指数,因为类似常数的表达式实际上是在编译时求值的。 现在,实际上,这种差异并不重要,正如
问题内容: 我需要在Seaborn distplot上绘制与某些X值相对应的点,以使它们落在密度曲线上或低于密度曲线。这是来自以下URL的distplot: 从Seaborn网站-distplot示例 因此,例如,在上面显示的曲线图中,我需要以编程方式确定与落在密度曲线上的X值0对应的Y轴值是多少。从图中看来,它大约在0.37左右。如何在我的程序中得到它? 假设可以做到,那么我如何在所示的图中显示
我有以下例外: WebDriverException:不能在点(1057.38330078125,673.13330078125)点击元素。其他元素将收到单击: 按钮id=“id4b6a687af6934e35b6f355f6305dc481”data-layout=“hbox”class=“hux-ui-button”type=“button”role=“button”> 硒=2.49。
问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,
这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。
问题内容: 我期望值可以交换。但是它给出x = 0和y = 1。当我尝试使用C语言时,它会给出正确的结果。 问题答案: 您的陈述大致相当于这种扩展形式: 与C语言不同,在Java中,保证二进制运算符的左操作数在右操作数之前进行求值。评估如下: 您可以反转每个xor表达式的参数顺序,以便在再次评估变量之前完成赋值: 这是一个更紧凑的版本,也可以使用: 但这是交换两个变量的真正可怕的方法。使用临时变量