请问:    if(radius>0&&height>0)   return area()*height;这句话的意思是不是求体积?那么:if(radius>0&&height>0)   return 2*Math.PI*radius*radius+2*Math.PI*radius*height; 当(radius>0&&height>0)的时候,area()*height还是体积吗?我应该没有错吧~~~

解决方案 »

  1.   

    没有调试你的代码,粗粗的看了一下。有不少问题哦。
    1、很不OO,你既然定义了一个叫做Shape的类,理解上应该是一个基类。像你怎么用
    public class circle extends Object
    { private String name;
      private shape p;
      ......
    }
    表示什么了?圆“有”一个类型!而不是圆“是”一个类型。2、为什么会是0,这个看看你的Shape的构造器
      public shape(double radius,double height)
      { 
          radius=getradius();
          height=getheight();
          area=area();
          volumn=volumn();
      }
    也没有调用什么缺省构造,那些getradius()、getheight()会给你的成员赋值?
    再说了你的构造参数传进来干吗呢?反正也不用!3、为了获得结果可以这样:
      public shape(double radius,double height)
      { 
          this.radius = radius;
          this.height = height;
          area=area(); //
          volumn=volumn(); //
      }
    area和volumn作为成员确实可以但是靠构造计算出来总觉得不爽!4、你的程序很不健壮,看看计算体积的方法:
      public double volumn()
      { if(radius==0&&height==0)
          return 0;
        if(radius>0&&height==0)
          return 0;
        if(radius>0&&height>0)
          return area()*height;
        return volumn();
      }
    很容易递归的哦,比如我构建了一个radius = -1, height=any的形状,你的程序就死定了!
    面积和体积都会递归而死!
      

  2.   

    程序结构和计算方法的问题!我不知道这段代码在哪里能通过编译,反正我这里是通不过的!
    建议重写!对IF判断改用SWITCH比较好看!