欢迎选择我的课程,让我们一起见证您的进步~~
height = (1/2)*height ; 应为 height = (1.0/2)*height ;, 否则它的值恒为 0.
height = (1/2)*height ;
height = (1.0/2)*height ;
因为 数值运算的类型转换,导致整数的除法的结果也为整数, 所以 1/2的结果为 0, 而不是 0.5.
1/2
还有 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 值,哪里是在累加……
y = height
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+"米"); }
}
height = (1/2)*height ;
应为height = (1.0/2)*height ;
, 否则它的值恒为 0.因为 数值运算的类型转换,导致整数的除法的结果也为整数, 所以
1/2
的结果为 0, 而不是 0.5.还有 y 每次循环都重置了. 改为:
y = height
每次循环都重置了 y 值,哪里是在累加……JavaScript 代码算法示意
所以代码可以这样写
public class Demo {
}