Java三元运算符 - 参数顺序

Java三元运算符 - 参数顺序

问题描述:

我只是不明白我做错了什么。 我正在尝试计算BCD所需的字节数。该公式相当简单:数字位数除以2,舍入为增加Java三元运算符 - 参数顺序

所以,我想这个

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 ++; 

,但我想了解之前什么地方出了错。有人可以解释为什么上述代码片段不能按预期工作?

+0

高兴的是,你解决了它,但是如果你不小心谨慎地标记(或调用)我们的一个错误作为错误,将不胜感激。我建议你在这里改变标题给出错误的印象:) – Ouney

+0

错误我的意思是我的代码中有一个。 - 我改变了标题,让其他人更有用;如果标题可以使用进一步改进,请告诉我(欢迎提供建议)。 – JWnxp

+0

执行此操作的_correct_方法只是'(numberOfDigitsInParameter + 1)/ 2'。如果你知道它即将到来,截断分裂是你的朋友。 –

您有错误的顺序您的论点。一般为三元表达的是:

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); 
+0

不会使用double需要在两种数据类型之间前后转换(昂贵)的转换吗? - 我一直在用int找一个Math.ceil()函数,但没有找到。 – JWnxp