如何计算两个整数的中间值?Java方法实现问题求助与优化建议
你的核心思路(取整数范围的中间值,且当中间值为小数时向下取整)是完全正确的,但代码存在语法和类型转换问题,而且确实有更简洁高效的实现方式,咱们一步步拆解解决:
先解决你遇到的两个代码错误
错误1:变量i和mm无法解析
Java里if的条件必须是布尔表达式,你直接在if (int i = (int)y)里声明变量的写法不符合语法规则;另外else if (mm = (int) Math.round(y))里的mm未提前声明就直接使用,也是语法错误。这类多余的变量声明完全没必要,咱们可以直接通过数值判断来处理逻辑。错误2:double类型无法转换为int类型
你的方法返回类型是int,但return y;中的y是double类型,Java不允许隐式将浮点类型转为整数类型(避免精度丢失),必须显式转换。不过这个问题其实可以通过全程使用整数运算彻底规避。
关于try/catch的思路是否合适?
完全没必要用try/catch,你的需求是对两个整数做中间值计算,全程都是整数运算,不会抛出需要捕获的异常;而转成字符串再处理更是绕远路,既麻烦又容易引入新问题,直接用整数运算就足够了。
更简便的实现方式
Java的整数除法本身就是向下取整的,刚好完美匹配你的需求:当两个整数相加后除以2,结果会自动舍弃小数部分,符合题目中“中间值在两个数之间时返回下方数”的要求。
另外要注意一个潜在问题:如果lowestPossible和highestPossible都是极大的正整数,它们的和可能会超出int的范围导致溢出。因此更安全的写法是用lowestPossible + (highestPossible - lowestPossible) / 2,这样能避免溢出风险。
最终的简洁代码如下:
public static int getBestNewGuess(int lowestPossible, int highestPossible) { // 避免溢出的安全写法,同时自动完成向下取整 return lowestPossible + (highestPossible - lowestPossible) / 2; // 如果不考虑极端溢出场景,也可以直接写: // return (lowestPossible + highestPossible) / 2; }
咱们验证几个典型场景:
- 输入
lowest=1, highest=5:1 + (5-1)/2 = 3,正确 - 输入
lowest=2, highest=5:2 + (5-2)/2 = 3,正确(中间值3.5向下取整为3) - 输入
lowest=-3, highest=2:-3 + (2 - (-3))/2 = -1,正确(中间值-0.5向下取整为-1)
这样既解决了所有语法错误,又高效实现了需求,代码简洁易读。
内容的提问来源于stack exchange,提问作者user15543957




