You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在while语句外获取递增的p变量并返回?代码语法是否正确?

问题解答

一、语法与逻辑问题检查

原代码存在两处关键问题:

  • 局部变量未初始化:int p;仅声明未初始化,虽然当前分支逻辑(else直接return -1)不会触发未使用错误,但不符合Java局部变量必须初始化的最佳实践,后续代码修改易引发编译问题。
  • 循环逻辑失效:result仅在循环外计算一次Math.pow(bounce, n),循环内n递增但result未重新计算,导致result*h的值固定不变,要么循环直接不执行,要么进入无限循环。

二、实现“在while外部获取递增后的p并返回”的方案

要在while循环外部拿到更新后的p值,核心是保证p的作用域覆盖循环和返回语句,同时修正循环逻辑让p正确递增。以下是修正后的代码:

package src;

public class Ball {
    public static int bounceBall(double h, double bounce, double window) { 
        // 初始化p,避免未初始化问题
        int p = 0;
        
        // 参数合法性校验
        if (h > 0 && bounce > 0 && bounce < 1 && window < h) {
            p = 1; // 第一次下落经过窗口,计数初始化为1
            double currentHeight = h * bounce; // 第一次弹起的高度
            
            // 每次弹起高度超过窗口,下落时会再次经过窗口,计数+1
            while (currentHeight > window) {
                p++;
                currentHeight *= bounce; // 计算下一次弹起的高度
            }
        } else {
            return -1;
        }
        
        // 直接返回循环后更新的p值
        return p;
    }
}

关键说明:

  1. 作用域控制:将p的声明移到if分支外并初始化,使其作用域覆盖整个方法,循环内修改后,方法末尾的return语句自然能拿到最新值。
  2. 逻辑修正:每次循环内更新当前弹起高度,确保循环能正确终止,同时p随着每次有效弹跳(弹起高度超过窗口)递增,符合实际计数逻辑。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:10:36