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 ++;
,但我想了解之前什么地方出了错。有人可以解释为什么上述代码片段不能按预期工作?
答
您有错误的顺序您的论点。一般为三元表达的是:
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
高兴的是,你解决了它,但是如果你不小心谨慎地标记(或调用)我们的一个错误作为错误,将不胜感激。我建议你在这里改变标题给出错误的印象:) – Ouney
错误我的意思是我的代码中有一个。 - 我改变了标题,让其他人更有用;如果标题可以使用进一步改进,请告诉我(欢迎提供建议)。 – JWnxp
执行此操作的_correct_方法只是'(numberOfDigitsInParameter + 1)/ 2'。如果你知道它即将到来,截断分裂是你的朋友。 –