ฉันต้องการสร้างคำตอบของ John Kugelman โดยไม่ต้องแทนที่ด้วยการแก้ไขโดยตรง มันใช้ได้กับกรณีทดสอบของเขา ( MIN_VALUE = -10, MAX_VALUE = 10) เนื่องจากความสมมาตรMIN_VALUE == -MAX_VALUEซึ่งไม่ใช่กรณีของจำนวนเต็มบวกของสองตัว ในความเป็นจริงMIN_VALUE == -MAX_VALUE - 1.
scala> (java.lang.Integer.MIN_VALUE, java.lang.Integer.MAX_VALUE)
res0: (Int, Int) = (-2147483648,2147483647)
scala> (java.lang.Long.MIN_VALUE, java.lang.Long.MAX_VALUE)
res1: (Long, Long) = (-9223372036854775808,9223372036854775807)
เมื่อนำไปใช้กับจริงMIN_VALUEและMAX_VALUEคำตอบของ John Kugelman จะให้กรณีล้นเมื่อใดa == -1และb ==สิ่งอื่นใด (ชี้ก่อนโดย Kyle) นี่คือวิธีแก้ไข:
long maximum = Long.signum(a) == Long.signum(b) ? Long.MAX_VALUE : Long.MIN_VALUE;
if ((a == -1 && b == Long.MIN_VALUE) ||
(a != -1 && a != 0 && ((b > 0 && b > maximum / a) ||
(b < 0 && b < maximum / a))))
{
}
มันไม่ได้เป็นวิธีการแก้ปัญหาทั่วไปสำหรับการใด ๆMIN_VALUEและMAX_VALUEแต่มันเป็นข้อมูลทั่วไปของ Java LongและIntegerและความคุ้มค่าของการใด ๆและab