编写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
相关产品推荐
相关产品推荐

