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

编写Java程序计算球以5%递减弹跳至停止的次数

Java弹跳球次数统计程序修正建议

原代码的核心问题

  • 变量初始化顺序错误:fivePer在输入初始高度前计算,此时height为0,导致fivePer始终是0,完全失去作用
  • 弹跳高度计算逻辑错误:每次弹跳后高度应是当前高度的95%(即当前高度 * 0.95),而非减去固定值
  • 循环条件与变量更新缺失:未更新当前高度,且height > 0会导致无限循环(理论上球永远不会完全到0),同时未使用noBounces计数
  • 输出逻辑错误:没有统计并输出弹跳次数,反而错误输出高度值

修正后的代码

package doWhileLoops;

import java.util.Scanner;

public class Ex3 {

    public static void main(String[] args) {
        Scanner key = new Scanner(System.in);
        // 用double存储高度,避免整数运算精度丢失
        double currentHeight;
        int bounceCount = 0;
        // 定义停止弹跳的阈值(比如高度小于0.1英尺时停止)
        final double STOP_THRESHOLD = 0.1;

        System.out.print("\n\tEnter the height in feet that the ball will be dropped from: ");
        currentHeight = key.nextDouble();

        // 第一次下落不算弹跳,弹跳是从弹起开始算
        // 当弹起后的高度大于阈值时,继续计数
        do {
            currentHeight *= 0.95; // 每次弹跳后高度减少5%
            if (currentHeight > STOP_THRESHOLD) {
                bounceCount++;
            }
        } while (currentHeight > STOP_THRESHOLD);

        System.out.print("\n\tTotal number of bounces before stopping: " + bounceCount);
        key.close();
    }
}

关键说明

  • 使用double类型存储高度:整数运算会丢失精度,比如初始高度10英尺,第一次弹跳后应该是9.5英尺,用int会变成9英尺,不符合需求
  • 设置停止阈值:现实中球弹跳高度低于某个值就会停止,这里设为0.1英尺,可根据需求调整
  • 弹跳计数逻辑:第一次下落触地后弹起才算第一次弹跳,循环中每次计算弹起后的高度,若高于阈值则计数加1
  • 关闭Scanner:避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:45:55