为什么这有效,但不像我预期的那样? Java 条件运算符
Why does this work, but not as I expected? Java conditional operator
我正在学习 Java 并且正在做这个小时间展示。然后这部分变得棘手:
int second = 66;
second = ((second >= 0) && (second < 60) ? second : (second % 60) & (minute += second / 60));
Return 秒如果在 0 到 60 之间,否则 return 秒 %60 并增加分钟。我希望它能工作,但第二个的输出是:
1
没有
(minute += second / 60)
它奏效了。将 60
更改为任何其他值,并观察第二次更改的值。怎么了?
您的 &
正在使用 second % 60
对新的 minute
值执行按位 &
,这似乎不太可能是个好主意。
鉴于您想要副作用,我强烈建议您不要在此处使用条件运算符 - 只需使用 if
语句:
if (second > 60)
{
minute += second / 60;
second = second % 60;
}
(如果您需要处理负值,您可能需要更多代码——这取决于您想要的结果。)
这里要吸取的教训是条件运算符用于计算值。在您的情况下,您真正感兴趣的是采取 操作 而不是计算值:"if the second
variable isn't already normalized, make changes to both second
and minute
"。这应该会让您想到 if
语句而不是条件运算符。很多时候您 可以 使用条件运算符,但使用 if
语句会更清楚。
我正在学习 Java 并且正在做这个小时间展示。然后这部分变得棘手:
int second = 66;
second = ((second >= 0) && (second < 60) ? second : (second % 60) & (minute += second / 60));
Return 秒如果在 0 到 60 之间,否则 return 秒 %60 并增加分钟。我希望它能工作,但第二个的输出是:
1
没有
(minute += second / 60)
它奏效了。将 60
更改为任何其他值,并观察第二次更改的值。怎么了?
您的 &
正在使用 second % 60
对新的 minute
值执行按位 &
,这似乎不太可能是个好主意。
鉴于您想要副作用,我强烈建议您不要在此处使用条件运算符 - 只需使用 if
语句:
if (second > 60)
{
minute += second / 60;
second = second % 60;
}
(如果您需要处理负值,您可能需要更多代码——这取决于您想要的结果。)
这里要吸取的教训是条件运算符用于计算值。在您的情况下,您真正感兴趣的是采取 操作 而不是计算值:"if the second
variable isn't already normalized, make changes to both second
and minute
"。这应该会让您想到 if
语句而不是条件运算符。很多时候您 可以 使用条件运算符,但使用 if
语句会更清楚。