为什么这有效,但不像我预期的那样? 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 语句会更清楚。