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