A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-7-21 02:49  /  3300 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
需求:求小球第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、程序是否有错误的地方,请指出。谢谢!

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
首先:定义方法的格式为:
修饰符 返回值类型 方法名 (参数列表){
    方法体;
}
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  没有返回值类型(也不是构造方法)是错误的。
回复 使用道具 举报
楼主你错误太多,第一你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;
   
              }
        }
}

回复 使用道具 举报
feigecal 发表于 2012-7-21 11:12
楼主你错误太多,第一你Qiu类里的函数没有主体和返回值 。在Sum类里的sum变量没有定义,也没有定义height变 ...

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

是我搞错了,现在明白了,谢谢!
回复 使用道具 举报
本帖最后由 陈少文 于 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));
               
        }
}



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马