Java 这道小题的错误在哪
天蓬老师
天蓬老师 2017-06-12 09:25:18
0
3
629
雷雷
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
学霸

height = (1/2)*height ; 应为 height = (1.0/2)*height ;, 否则它的值恒为 0.

因为 数值运算的类型转换,导致整数的除法的结果也为整数, 所以 1/2的结果为 0, 而不是 0.5.

还有 y 每次循环都重置了. 改为:

public class Demo {
    public static void main(String[] args){
        //小球的高度
        double height = 100;
        //小球经过的距离
        double y = 0;
        for(int i=1;i<=10;i++){
            //记录小球每次往下落的距离,球弹起和下落,所以 height * 2
            y = y + height*2;

            //反弹的高度
            height = (1.0/2)*height ;
        }
        // 第一次落地没有经历弹起过程,需减掉初始高度
        y = y - 100;
        System.out.println("共经过"+y+"米");
        System.out.println("第10次反弹的高度是:"+height+"米");
    }
}
三叔

y = height 每次循环都重置了 y 值,哪里是在累加……

JavaScript 代码算法示意

var height = 100
var sum = height;
for (var i = 2; i <= 10; i++) {
    sum += height;
    height /= 2
}
// sum == 299.609375,即总路程

// 最后一次是第10次弹起再下落的总长,所以再除以2才是弹起的高度
height /= 2;    // 0.09765625
迷茫

所以代码可以这样写
public class Demo {

public static void main(String[] args){
    //小球的高度
    double height = 100;
    //第一次小球经过的距离
    double y = height;
    //不算上第一次,到第10次还要经历9次
    for(int i=1;i<=9;i++){
    //反弹的高度每次都是前一次的一半
        height = (1/2)*height;
        //每一次弹跳往返都是高度的两倍
        y += height*2;  
    }
    System.out.println("共经过"+y+"米");
    System.out.println("第10次反弹的高度是:"+height+"米");
}

}

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板