一行代码对我来说是不可理解的

时间:2016-07-28 12:50:53

标签: java android

  

newTilt = (newTilt > 90) ? 90 : newTilt;

这行代码是什么意思?这是我第一次在Android中看到类似的东西。

这是包含上述行的完整方法:

public void onTiltMore(View view) {
    if (!checkReady()) {
        return;
    }

    CameraPosition currentCameraPosition = mMap.getCameraPosition();
    float currentTilt = currentCameraPosition.tilt;
    float newTilt = currentTilt + 10;

    newTilt = (newTilt > 90) ? 90 : newTilt;

    CameraPosition cameraPosition = new CameraPosition.Builder(currentCameraPosition)
            .tilt(newTilt).build();

    changeCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}

3 个答案:

答案 0 :(得分:6)

这是ternary表达式。它表示如果此时newTilt高于90,则将其设置为90,否则保持不变。您可以以if-else语句的方式来思考它。

 if(newTilt > 90) {
    newTilt = 90;
 } else {
    newtilt = newTilt; // which does nothing useful 
 }

答案 1 :(得分:3)

这个表达意味着

newTilt = (newTilt > 90) ? 90 : newTilt;

是一个表达式,它返回两个值之一90newTilt。条件(newTilt > 90)已经过测试。如果为真,则返回第一个值90。如果为false,则返回第二个值newTilt。返回的值取决于条件测试(newTilt > 90)

答案 2 :(得分:1)

正如某人已经说过的那样,它被称为三元表达。这是你应该学到的东西,因为我已经看到它出现在很多面试问题上。这个表达式的作用是,如果表达式的计算结果为true,那么冒号的左侧将被用作结果,如果它的计算结果为false,则使用右侧。它经常被用作if / else语句的快捷方式。事实上,你可以这样写上面的内容:

if (newTilt > 90)
    newTilt = 90;
else
    newTilt = newTilt;

显然,你不需要上面的else语句,因为如果newTilt不到90就不会改变。我只是想告诉你三元是如何工作的。

事实上,三元仍然是一个条件表达式。

int var =(表达式)?真值:假值;

由于虚假条件实际上什么都不做,上面的三元组会更好地写成:

if (newTilt > 90)
    newTilt = 90;

这就是你所需要的一切。