一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次能反弹多高?我的程序为package zy;
public class jiayou{
public void hehe(double a,double b){ // a= 100米 b=10次
double hight = a;
double max =a;
for(int i=0;i<b;i++){
hight=hight/2; //循环求第10次落下的米数
max=max+hight*2; //循环求10次总共多少米
}
max=max-hight; //总共的米数减去第10次掉下的米数
System.out.println("第10次落下反弹的米数为:"+hight);
System.out.println("第10次落地时总共经过的米数为:"+max);
}
public static void main(String[]args){
jiayou t = new jiayou();
t.hehe(100,10);
}
}书上的程序是:public class TanQiu{
public static void main(String args[]){
FanTan com = new FanTan();
com.compute();
} private void compute(){
double sum = 0.0;
double start = 100.0;
double end = 0.0; for(int a=1; a<=10; a++){
if(a==10){
sum += start;
end = start/2;
}else{
sum += start + start/2;
}
start = start/2;
}
System.out.println("共经过"+sum+"米,"+"第10次反弹"+end+"米");
}
}
运行过后,第10次反弹米数是一致的,可是总共经过的米数,我和书是两种.书上的答案是(共经过299.609375米),我的答案是
(共经过的米数为:299.70703125).是我的程序设计错了吗,我百思不得其解,请各位大侠帮忙看看~
public class jiayou{
public void hehe(double a,double b){ // a= 100米 b=10次
double hight = a;
double max =a;
for(int i=0;i<b;i++){
hight=hight/2; //循环求第10次落下的米数
max=max+hight*2; //循环求10次总共多少米
}
max=max-hight; //总共的米数减去第10次掉下的米数
System.out.println("第10次落下反弹的米数为:"+hight);
System.out.println("第10次落地时总共经过的米数为:"+max);
}
public static void main(String[]args){
jiayou t = new jiayou();
t.hehe(100,10);
}
}书上的程序是:public class TanQiu{
public static void main(String args[]){
FanTan com = new FanTan();
com.compute();
} private void compute(){
double sum = 0.0;
double start = 100.0;
double end = 0.0; for(int a=1; a<=10; a++){
if(a==10){
sum += start;
end = start/2;
}else{
sum += start + start/2;
}
start = start/2;
}
System.out.println("共经过"+sum+"米,"+"第10次反弹"+end+"米");
}
}
运行过后,第10次反弹米数是一致的,可是总共经过的米数,我和书是两种.书上的答案是(共经过299.609375米),我的答案是
(共经过的米数为:299.70703125).是我的程序设计错了吗,我百思不得其解,请各位大侠帮忙看看~
这个就等于100(球从100米掉下来)+ hight*2 (反弹的高度+掉下去的高度)
max=max-hight; //总共的米数减去第10次掉下的米数(因为10次后不在计算掉下去的值)这没错啊.谁来解答解答~~~~~~
public class ball { /**
* @param args
*/
public static void main(String[] args) {
double height =100;//当前高度
double ch = 0; //反弹后高度
int i=0; //反弹次数
double sum=0; //总路程
do{
sum +=height*2;
ch=height/2;
height = ch;
System.out.println("当前高度为"+ch);
i++;
}while(ch>0.1);
System.out.println("至反弹高度低于0.1米时");
System.out.println("经历反弹次数"+i+"。共经过"+(sum-100)+"米。"); }}
//
/* output :
当前高度为50.0
当前高度为25.0
当前高度为12.5
当前高度为6.25
当前高度为3.125
当前高度为1.5625
当前高度为0.78125
当前高度为0.390625
当前高度为0.1953125
当前高度为0.09765625
至反弹高度低于0.1米时
经历反弹次数10。共经过299.609375米。
*/
http://topic.csdn.net/u/20090719/16/1309a6cf-50c5-4c2d-b92e-6b2dbf00f835.html
改为max=max-hight*2;
public class FreeFall
{
//从a高度下落b次,每次反弹高度为原来的一半
public void Fall(double a,double b)
{
double height=a;
double max=0;
for(int i=0; i<b; i++)
{
height=height/2; //反弹高度
max=max+height*3; //运动总距离
System.out.println("第10次落下反弹的米数为:"+height);
}
max=max-height;
System.out.println("第10次落地时总共经过的米数为:"+max);
} public static void main(String[] args)
{
FreeFall t = new FreeFall();
t.Fall(100,10);
}
}
</Code>
public class FreeFall
{
//从a高度下落b次,每次反弹高度为原来的一半
public void Fall(double a,double b)
{
double height=a;
double max=0;
for(int i=0; i<b; i++)
{
height=height/2; //反弹高度
max=max+height*3; //运动总距离
System.out.println("第10次落下反弹的米数为:"+height);
}
max=max-height;
System.out.println("第10次落地时总共经过的米数为:"+max);
} public static void main(String[] args)
{
FreeFall t = new FreeFall();
t.Fall(100,10);
}
}
PS:LZ的函数名和变量最好是有意义的