You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何计算两个整数的中间值?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;中的ydouble类型,Java不允许隐式将浮点类型转为整数类型(避免精度丢失),必须显式转换。不过这个问题其实可以通过全程使用整数运算彻底规避。

关于try/catch的思路是否合适?

完全没必要用try/catch,你的需求是对两个整数做中间值计算,全程都是整数运算,不会抛出需要捕获的异常;而转成字符串再处理更是绕远路,既麻烦又容易引入新问题,直接用整数运算就足够了。

更简便的实现方式

Java的整数除法本身就是向下取整的,刚好完美匹配你的需求:当两个整数相加后除以2,结果会自动舍弃小数部分,符合题目中“中间值在两个数之间时返回下方数”的要求。

另外要注意一个潜在问题:如果lowestPossiblehighestPossible都是极大的正整数,它们的和可能会超出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=51 + (5-1)/2 = 3,正确
  • 输入lowest=2, highest=52 + (5-2)/2 = 3,正确(中间值3.5向下取整为3)
  • 输入lowest=-3, highest=2-3 + (2 - (-3))/2 = -1,正确(中间值-0.5向下取整为-1)

这样既解决了所有语法错误,又高效实现了需求,代码简洁易读。

内容的提问来源于stack exchange,提问作者user15543957

火山引擎 最新活动