有人可以在下面的代码中解释问号吗?此外,INITIAL_PERMANCE是代码中的静态最终常量,但synatax的最后一行是什么?
Synapse(AbstractCell inputSource, float permanence) {
_inputSource = inputSource;
_permanence = permanence==0.0 ?
INITIAL_PERMANENCE : (float)Math.min(1.0,permanence);
}
答案 0 :(得分: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>
答案 1 :(得分: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网站上有一个很好的解释
答案 2 :(得分:0)
这是ternary operator.它就像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()
的结果转换为浮点数的结果。你必须阅读更多关于floating point numbers are的内容,以了解这样做的价值。
答案 3 :(得分:0)
它被称为Java三元运算符(如Hovercraft所说),并且使用如下:
type variableName = (statement) ? value if statement is true: value if false;
答案 4 :(得分:0)
这是最常用的方式 [可选变量] =(布尔测试)? (如果为True则执行此操作):(如果为false,则执行此操作)