Java三元运算符 - 参数顺序

时间:2015-07-10 14:08:26

标签: java operator-keyword ternary

我只是不知道自己做错了什么。 我试图计算BCD所需的字节数。公式相当简单:位数除以2,舍入向上

所以我试过这个

int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : (numberOfDigitsInParameter/2 + 1);

int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : ((numberOfDigitsInParameter/2) + 1);

或者,因为它在逻辑上更有声音,原来是这样的:

int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : ((numberOfDigitsInParameter + 1) /2);

有几种变化和包围。很多括号。设置标志时,它会一直返回错误的值;它应该在减半后添加+1,但它不会。

此解决方法可以正常使用

int halfRoundedUp = numberOfDigitsInParameter/2;
if (isOddNumberOfDigits)
    halfRoundedUp ++;

但我想了解以前出了什么问题。有人可以解释为什么上面的代码片段没有按预期工作吗?

1 个答案:

答案 0 :(得分:4)

你的论点错误。三元表达的一般表达是:

condition ? return_if_true : return_if_false

如果数字有一个奇数位数,你想要除以2并加一,所以你需要翻转参数:

int halfRoundedUp = isOddNumberOfDigits ? 
                    numberOfDigitsInParameter / 2  + 1 : 
                    numberOfDigitsInParameter / 2;

编辑:
即使问题是关于三元运算符的使用,我必须个人说,我只是使用java.util.Math.ceil(double)

// note the floating point division
int halfRoundedUp = Math.ceil(numberOfDigitsInParameter / 2.0);