0

有人可以解释以下代码中的问号吗?此外 INITIAL_PERMANCE 是代码中的静态最终常量,但最后一行语法是什么?

Synapse(AbstractCell inputSource, float permanence) {
    _inputSource = inputSource;
    _permanence = permanence==0.0 ? 
        INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);
}
4

5 回答 5

9

这 ?和 : 是 java 条件运算符的一部分。有时称为三元运算符,因为它是 Java 中唯一接受 3 个参数的运算符。

这本质上是一个内联的 IF / THEN / ELSE 块。

_permanence = permanence==0.0 ? 
    INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);

可以改写如下:

if (permanence == 0.0)
    _permanence = INITIAL_PERMANENCE;
else
    _permanence = (float) Math.min(1.0,permanence);

条件运算符的一般形式是

<Test returning a boolean> ? <value for if test is true> : <value for if test is false>
于 2012-09-15T02:27:53.277 回答
0

这等于内联方式的 if else 语句。等效于

   _permanence = 
    {// A kind of anonymous routine for assignment
      if(permanence==0.0)
      { INITIAL_PERMANENCE } 
      else
      { (float)Math.min(1.0,permanence)}
    }

关于三元运算符的 oracle 网站上有一个很好的解释

于 2012-09-15T02:25:30.660 回答
0

这是三元运算符。 它的工作方式类似于 if-else 语句。

分解后,语句类似这样:

if(permanence == 0.0) { 
    _permanence = INITIAL_PERMANENCE;
} else {
    _permanence = (float)Math.min(1.0,permanence);
}

在含义非常明确的情况下,它的使用受到限制。三元运算符可能会造成混淆,因此请谨慎使用。

最后的声明:

(float)Math.min(1.0, permanence)

称为类型转换。您正在将Math.min()返回双精度的 的结果转换为浮点数的结果。您必须阅读更多关于浮点数的内容才能看到这样做的价值。

于 2012-09-15T02:25:38.757 回答
0

它被称为 Java 三元运算符(正如 Hovercraft 所说),使用如下:

type variableName = (statement) ? value if statement is true: value if false;
于 2012-09-15T02:28:13.407 回答
0

这是最常见的使用方式。
[可选变量] =(布尔测试)?(如果为真则执行):(如果为假则执行)

于 2012-09-15T02:28:56.167 回答