Heim > Fragen und Antworten > Hauptteil
/*
* 一球从100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,
* 求它在第10次落地时共经过多少米?第10次反弹多高?
*
*/
修改的地方都加粗了
public class Demo {
public static void main(String[] args){
//小球反弹后的高度
double height = 100;
//y用于记录小球下落的高度
double y = 0;
//小球经过的总路程
**double sum = 0;**
for(int i =1;i<=10;i++){
//记录小球落下的高度
y = height ;
//小球每次反弹后的高度
height = (**1.0**/2)*height;
//因为第10次反弹的高度是不用加的
if(i<=9){
//小球的总路程
sum =y+height;
}
}
System.out.println("共经过"+sum+"米");
System.out.println("第10次反弹的高度是:"+height+"米");
}
}
欧阳克2017-06-12 09:27:18
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+"米");
}
}
三叔2017-06-12 09:27:18
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
迷茫2017-06-12 09:27:18
所以代码可以这样写
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+"米");
}
}