gpt4 book ai didi

Java三元运算符——参数顺序

转载 作者:行者123 更新时间:2023-11-29 03:07:32 25 4
gpt4 key购买 nike

我只是不明白我做错了什么。我正在尝试计算 BCD 所需的字节数。公式相当简单:位数除以二,向上舍入。

所以我试了一下

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

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

最佳答案

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

condition ? return_if_true : return_if_false

如果数字的位数是奇数,你想除以二加一,所以你需要翻转参数:

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

关于Java三元运算符——参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31342900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com