黑马程序员技术交流社区

标题: 小球自由落体程序 [打印本页]

作者: 王桂丽    时间: 2012-7-21 02:49
标题: 小球自由落体程序
/*
需求:求小球第5次落地时反弹的高度与所走的总路程
已知:小球从5m高的高度自由落下,落地后反弹的高度为前一次的一半,然后继续落下
*/


class  Qiu
{
        double gaodu=5;//初始高度5m
        double sum;//sum为小球所经过的路程
        height(double n)               
        double height=(double)(5/Math.pow(2,n));//小球第n次落地后所反弹的高度
}
class sum
{
        sum(double n)
                {
                        if (n=1)//如果小球只落地一次,小球所经过的路程
                                {
                                        sum=5;
                                }
                        else//小球落地次数大于一次,第
                                {
                                for(y=2;y<(n+1);y++)
                                sum+=5+height*2;//小球从第二次开始,每次反弹到前一次高度的一半,又以前一次高度的一半落下来,相当于走了两次height,但第一次,只走了一次初始高度
                                }
                }
}
class  PaoQiu
{
        public static void main(String[] args)
        {
               
                height(5);
                sum(5);
                System.out.println("第5次落地时反弹的高度="+height);
                System.out.println("第5次落地时所走的总路程"+sum);
        }
}



疑问:1、为何总提示height(double n) 方法声明无效,需要返回类型
           2、程序是否有错误的地方,请指出。谢谢!

作者: 焦晨光    时间: 2012-7-21 09:04
首先:定义方法的格式为:
修饰符 返回值类型 方法名 (参数列表){
    方法体;
}
1。方法的修饰符是可选项,可以有多个,也可以没有;
2。方法的返回值类型是必须的(构造方法除外)。如果方法不返回任何值,它必须声明为void(空)。
    java对返回值要求是很严格的。
class  Qiu
{
        double gaodu=5;//初始高度5m
        double sum;//sum为小球所经过的路程
        height(double n)               
        double height=(double)(5/Math.pow(2,n));//小球第n次落地后所反弹的高度
}
综上所述,很明显楼主定义的方法 height  没有返回值类型(也不是构造方法)是错误的。
作者: 孙飞    时间: 2012-7-21 11:12
楼主你错误太多,第一你Qiu类里的函数没有主体和返回值 。在Sum类里的sum变量没有定义,也没有定义height变量就使用,错误太多了,我就不说了,我按你的思路给你改了一下,你对着看看,还有你的代码利用性太错,太乱,我自己给你重写一个
你的思路的:
class  Qiu
{
       double gaodu=5;
       double sum;
       public double height(double n)
      {
             double height=(double)(5/Math.pow(2,n));
              return height;
        }
}
class Sum
{

     double sum;
     Sum(double n)
    {
  
           if (n==1)
          {
               sum=5;
                System.out.println("第"+n+"次落地时所走的总路程"+sum);
          }
          else
         {
                  sum=5;
                  for(int y=2;y<=n;y++)
                {
                        double height=new Qiu().height(y-1);
                       sum=sum+height*2;
                }
               System.out.println("第"+n+"次落地时所走的总路程"+sum);
         }
  
     }
}
class  PaoQiu
{
        public static void main(String[] args)
        {
               
                double height=new Qiu().height(5);
                new Sum(5);
                System.out.println("第5次落地时反弹的高度为"+height);
               
        }
}
简化后的:
class QiuTi
{
        public static void main(String[] args)
       {
                 double gao=5;
                double sum=5;
                  for (int x=1;x<=5 ;x++ )
               {
                        System.out.println("第"+x+"次落地经过的路程"+sum);
                        gao=gao/2;
                         System.out.println("第"+x+"次落地弹起的高度为"+gao);
                       sum+=gao*2;
   
              }
        }
}


作者: 王桂丽    时间: 2012-7-21 20:25
feigecal 发表于 2012-7-21 11:12
楼主你错误太多,第一你Qiu类里的函数没有主体和返回值 。在Sum类里的sum变量没有定义,也没有定义height变 ...

多谢指教,但是你简化后的程序编译时不出错,但是不能运行啊!
作者: 王桂丽    时间: 2012-7-21 22:44
feigecal 发表于 2012-7-21 11:12
楼主你错误太多,第一你Qiu类里的函数没有主体和返回值 。在Sum类里的sum变量没有定义,也没有定义height变 ...

是我搞错了,现在明白了,谢谢!
作者: 陈少文    时间: 2012-7-22 07:02
本帖最后由 陈少文 于 2012-7-23 11:58 编辑




import java.util.Scanner;

/*
需求:求小球第5次落地时反弹的高度与所走的总路程
已知:小球从5m高的高度自由落下,落地后反弹的高度为前一次的一半,然后继续落下
次数n
高度height  =5
   当n= 1时为5,当n=2时为2.5     
就可以直接推出
f(h_n) =height/2^(n-1)

*/

public class Qiu
{
        public static void main(String[] args)
        {
                System.out.println("请输入次数");
                Scanner in = new Scanner(System.in);
                int count = in.nextInt();
               
                method(count);        
        }
        public static void method(int n)
        {
                double h = 5;
               
                //小球n次落地高度
               
                double h_n = h/(Math.pow(2,(n-1)));
                System.out.println("小球在高度为"+h_n);
                //当n=1时s为5
                //当n>2时
                double s_n=0;
                for(int x=2;x<=n;x++)
                {
                        s_n =h/(Math.pow(2,(x-1)))*2+s_n;
                }
                System.out.println("小球走的总路程:"+(s_n+h));
               
        }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2