我遇到了这段代码来计算 AVL 树节点的高度:
private int height (AvlNode<T> t) {
return t == null ? -1 : t.height;
}
?
和是什么:
意思?
我遇到了这段代码来计算 AVL 树节点的高度:
private int height (AvlNode<T> t) {
return t == null ? -1 : t.height;
}
?
和是什么:
意思?
这是一个三元运算符。一般语法是:
cond ? ifTrue : ifFalse
wherecond
是一个返回布尔值的表达式。整个表达式被评估为ifTrue
whencond
为真,否则被评估为ifFalse
。当然,两者ifTrue
和都ifFalse
必须是兼容的类型(请注意,这null
对于对象是可能的)。
实际上,上面的代码完全等同于以下代码:
if (t == null)
return -1;
return t.height;
这是在许多语言中都可以找到的非常经典的运算符。一种没有此运算符的语言是 Python。
这就像一个 if 测试。
您的示例类似于此代码:
if (t == null) return -1;
else return t.height;
如果 t 为 null,它将返回 -1,否则将返回 t.hight。这是一种更简洁的方式来实现空检查,而不是
if(t==null)
return -1
else
return t.hight
但它可能看起来比“如果方法”更神秘
(a > b) ? a : b;
是一个表达式,它返回两个值之一,a
或 b。测试条件 (a > b)。如果为真,则返回第一个值 a。如果为假,则返回第二个值 b。返回哪个值取决于条件测试,a > b。条件可以是任何返回布尔值的表达式。
它相当于:
if (t==null)
return -1;
else
return t.height;
条件运算符? : 用于根据第一个表达式的值返回任一表达式的结果。
它通过评估布尔 expr然后决定评估哪个表达式来工作。