1

我遇到了这段代码来计算 AVL 树节点的高度:

private int height (AvlNode<T> t) {
  return t == null ? -1 : t.height; 
}

?和是什么:意思?

4

5 回答 5

7

这是一个三元运算符。一般语法是:

cond ? ifTrue : ifFalse

wherecond是一个返回布尔值的表达式。整个表达式被评估为ifTruewhencond为真,否则被评估为ifFalse。当然,两者ifTrue和都ifFalse必须是兼容的类型(请注意,这null对于对象是可能的)。

实际上,上面的代码完全等同于以下代码:

if (t == null)
    return -1;
return t.height;

这是在许多语言中都可以找到的非常经典的运算符。一种没有此运算符的语言是 Python。

于 2013-06-01T14:56:07.133 回答
1

这就像一个 if 测试。

您的示例类似于此代码:

if (t == null) return -1;
else return t.height;
于 2013-06-01T14:56:44.130 回答
0

如果 t 为 null,它将返回 -1,否则将返回 t.hight。这是一种更简洁的方式来实现空检查,而不是

if(t==null)
   return -1
else
   return t.hight

但它可能看起来比“如果方法”更神秘

于 2013-06-01T14:56:17.850 回答
0
(a > b) ? a : b; 

是一个表达式,它返回两个值之一,a

或 b。测试条件 (a > b)。如果为真,则返回第一个值 a。如果为假,则返回第二个值 b。返回哪个值取决于条件测试,a > b。条件可以是任何返回布尔值的表达式。

于 2013-06-01T14:56:41.247 回答
0

它相当于:

if (t==null)
    return -1;
else
    return t.height;

条件运算符? : 用于根据第一个表达式的值返回任一表达式的结果。

它通过评估布尔 expr然后决定评估哪个表达式来工作。

于 2013-06-01T14:58:38.123 回答