一球从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).是我的程序设计错了吗,我百思不得其解,请各位大侠帮忙看看~

解决方案 »

  1.   

    不对啊,楼上的, max=max+hight*2; //循环求10次总共多少米
      这个就等于100(球从100米掉下来)+ hight*2 (反弹的高度+掉下去的高度)
            max=max-hight; //总共的米数减去第10次掉下的米数(因为10次后不在计算掉下去的值)这没错啊.谁来解答解答~~~~~~
      

  2.   

    以前写的类似
    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米。
    */
      

  3.   

    这个帖有点像我的追踪问题:
    http://topic.csdn.net/u/20090719/16/1309a6cf-50c5-4c2d-b92e-6b2dbf00f835.html
      

  4.   

     max=max-hight; //总共的米数减去第10次掉下的米数
    改为max=max-hight*2;
      

  5.   

    <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);
        }
    }
    </Code>
      

  6.   


    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);
        }
    }
      

  7.   

    落地只能从第一次开始,而且第一次和别的不一样
    PS:LZ的函数名和变量最好是有意义的