【问题标题】:Java area classJava区域类
【发布时间】:2019-07-30 06:50:52
【问题描述】:

我正在编写一个类的代码,该类要求我编写一个 Area 类来计算以下形状的面积:圆形、矩形和圆柱体。

圆的面积 = (π)(r^2) 其中 π 是 Math.PI,r 是圆的半径

矩形的面积 = (宽度) * (长度)

圆柱的面积 = (π)(r^2)(h) 其中 π 是 Math.PI,r 是圆柱体的底,h 是圆柱体的高度

我还必须创建一个区域测试类,我不知道从哪里开始。

【问题讨论】:

  • 这不是出租编码器。你具体坚持什么?你试过什么?如果你不知道如何创建一个类并向它添加方法,你应该更加努力地阅读书​​籍。
  • 是类定义还是数学有问题?
  • 作业对考试有什么影响?只是测试还是使用特定系统?
  • 我会让他怀疑他们的 CS101 课程做了“30 天内环游世界”之类的事情,第一个作业没有任何编程,这是第一个Java 分配。
  • @Victor @Ed 作为一个教过 Java 入门课程的人,人们常常会惊讶地发现人们做得很好,但随后却被某个特定的主题挂断了(“编写 .equals() 方法" - 例如,它与 '==' 运算符不一致)。或者无法将先前教授的概念(阶级关系)与应用它的新方式(编写井字游戏)相关联。所以,我不确定“更努力地阅读书​​籍”是否一定是公平的批评 - 至少,如果没有一些关于人们应该重新审视的概念类型或思考它们的新方式的指导。

标签: java


【解决方案1】:

由于这是家庭作业,我们无法给您答案,但我们可以以正确的方式指导您。

既然你说你在课堂上表现不错,我假设你已经了解了一些 Java - 这绝不是编程介绍中的第一个作业。

想想 Area 类。它提供服务但从未实例化。换句话说,没有区域“对象”。只有数学函数。因此,所有的函数都需要是“静态的”,所以你可以写类似 Area.circleArea(...)

现在开始写作:显然,您了解这些函数在数学上的含义。想想你将如何用 Java 编写它们。显然,您正在处理三个不同的功能。您将如何声明它们中的每一个?

换句话说,如下函数中的 ????s 是什么?

static ???? areaOfCircle(????)
{
   BODY
}

static ???? areaOfRectangle(????, ????)
{
   BODY
}

【第三个呢?那一个取决于你...]

如果你弄清楚问号部分,你将拥有函数的“空壳”。一旦你有了它,你会发现编写实际的 BODY 非常简单。或者,向我们展示您所拥有的,然后我们会尽力提供帮助。

【讨论】:

    【解决方案2】:

    "...圆柱的面积:Area= (TT)(r^2)(h) 其中 TT 是 Math.PI,r 是圆柱的底,h 是圆柱的高度..."

    对不起,这很简单。 (只要看看单位——它们是长度的立方,而不是长度的平方。)这个公式没有给出圆柱体的表面积。你从哪里得到的?

    圆柱的表面积是两端和边上圆的面积之和,即:

    2πr^2 + 2πrh = 2πr(r+h)

    听起来像是某种多态分配,你应该有一个 Shape 接口:

    public interface Shape
    {
        double area();
    }
    

    然后您将拥有实现此接口并返回区域值的子类。如果你真的很聪明,你会得到一个 Shapes 数组,你会循环遍历,调用不同的 area() 方法,并根据每个 Shape 的运行时类型显示你得到不同的结果。它实际上是自己写的。

    【讨论】:

    • 很好,如果圆柱体的表面积实际上是想要的;他的公式是体积(π*r^2*h)。并且 +1 用于多态解决方案而不是静态过程代码。
    【解决方案3】:
    public static class Area 
    {
    
    public static double getArea(double radius) 
    {
        return Math.PI * radius * radius;
    }
    
    
    public static double getArea(int length, int width) 
    {
        return length * width;
    }
    
    
    public static double getArea(double radius, double height) 
    
    {
        return Math.PI * radius * radius * height;
    }
    
    }
    

    【讨论】:

    • 我认为教别人的正确方法是给他框架代码和测试它的方法。这就是我给的全部。
    • 我认为帮助太大了,因为他需要学习的是把英语语言的需求/规范翻译成代码:所以说他需要一个类,有三个静态方法,每个都有名称和参数,但不提供代码。只是我的观点。你的回答肯定很有帮助,只是,也许,有点太有帮助了。
    • 嘿。大写方法名称?这不是 C# :-P
    【解决方案4】:

    根据具体问题,可能有两种方法可以做到这一点。

    1. 创建一个名为 area 的单个类。给这个类没有构造函数和成员数据。只需给它三个方法,最好是静态方法,名称如 calculateAreaOfCircle,每个都有合适的参数。

    2. 创建一个名为 AbstractArea 的抽象类,使用一个名为 calculateArea ... 的抽象方法,或者用一个名为 IArea 的接口代替抽象类。创建三个具体的子类,命名为 Circle 等。为子类提供合适的成员数据(例如,Circle 子类应包含其半径作为数据成员)。在每个子类中实现无参数的calculateArea方法。

    其中第一个是对您提出问题的确切方式的更准确答案。

    【讨论】:

      【解决方案5】:

      说到测试,一个简单的测试方法是这样的。假设我有一个“计算数字的平方”功能:

      public class MathClass
      {
         public static double square(double n)
         {
            return (2*n);
         }
      }
      

      为了进行测试,您需要运行您的程序 - 在本例中是我的 square() 函数 - 并将其与 known 输出进行比较。

      所以我可能会说,“好吧,我知道 4 的平方。4 的平方是 16。让我确保我的 square() 函数返回 16。”

      要为此编写一个简单的单元测试,我可能会这样写:

      public static void main(String args[])
      {
         System.out.println("Expected output: 4 squared = 16");
         System.out.println("Actual output: 4 squared = " + MathClass.square(4));
      }
      

      如果我运行这个程序,我会立即看到一个错误 - 等一下,我的输出如下所示:

      Expected output: 4 squared = 16
      Actual output: 4 squared = 8
      

      在这种情况下,可以返回并更正代码,寻找 square() 的问题。

      你可以用你的面积计算代码做类似的事情。编写一个基本测试,将您的代码输出与 已知 值(即您手动计算的值)进行比较。

      测试 0 和 1 之类的值很好 - 但测试“23.49”之类的“非显而易见”数字也很好,因为它们没有 0 或 1(或 2,或整数有)

      【讨论】:

        【解决方案6】:

        问问你的教授,你已经为这门课付出了相当多的钱,我相信你可以向他寻求帮助。

        另外,您的目标是按照教授想要的方式完成作业,简单明了。全世界最适合帮助你的人就是教授。

        【讨论】:

          【解决方案7】:

          我会做这样的事情——毕竟你是在用 Java 编码;):

          一个接口基本上定义了哪些方法是强制性的

          public interface IShape{
            double getArea();
          }
          

          而要计算面积或表面积,只需在getArea() 方法中实现算法即可。这是一个入门示例,不同形状的构造函数会有所不同,它们用于定义形状。例如,对于圆,您可能希望构造函数将半径作为输入;圆柱体、底面半径/直径和高度。

          public class Square implements IShape{
            private double side;
          
            public Square(double side){
              this.side = side;
            }
          
            public double getArea(){
              return side * side;
            }
          }
          

          计算面积很简单

          new Square(5).getArea();
          

          对于测试,我建议使用 JUnit。这个项目应该是相当简单的。

          【讨论】:

            【解决方案8】:

            这是课程。

            /**
             * 
             * @author  LAB 6
             * This program will calculate area of rectangle, circle, and cylinder.
             * Write a class that has three overloaded static methods for calculating the areas of the following 
             * geometric shapes: circles, rectangles, cylinders
             * Because the three methods are to be overloaded, they should each have the same name, 
             * but different parameter lists. Demonstrate the class in a complete program.
             */
            
            public class AreaClass { //begins class
            
            
                /**
                 * Method should calculate the area of a circle
                 * 
                 * @param radius
                 * @return area of a circle
                 */
            
                public static double getArea(double radius)  //method to get area of circle
                {
                    return Math.PI * radius * radius; //calculates and returns circle area
                }//end method
            
                /**
                 * Method should calculate the area of a rectangle
                 * 
                 * @param length
                 * @param width
                 * 
                 * @return area of a rectangle
                 */
            
                public static double getArea(int length, int width) //method to get area of rectangle
                {
                    return length * width; //calculates and returns rectangle area
                }//end method
            
                /**
                 * Method should calculate the area of a cylinder
                 * 
                 * @param radius
                 * @param height
                 * 
                 * @return area of a cylinder
                 */
                public static double getArea(double radius, double height) //method to get area of cylinder
                {
                    return Math.PI * radius * radius * height; //calculates and returns area of cylinder
                }//end method
            }//end class
            

            【讨论】:

              【解决方案9】:

              一种方法:当您陷入困境时(或者,正如许多人所说,一直),您应该从测试代码开始。下面我为此使用骨架 JUnit3,不确定您在课堂上使用的是什么。斜体字是您想象中的思维过程。

              好吧,我将不得不测试一种计算圆面积的方法。

              public void testAreaOfCircle() {
                 double areaCalculated = Well, I need a function here...
                 assertEquals(TRUE_AREA, areaCalculated); 
              }
              

              好的,下一步,我们填写函数和测试

              public void testAreaOfCircle() {
                 double r = 2.3;  // some arbitrary positive number
                 double areaCalculated = MyClass.areaOfCircle(r);  // let's make the method static for now...
                 assertEquals(r*r*Math.PI, areaCalculated); 
              }
              

              嗯,如果 r 将它添加到你的测试代码中......

              (次要注意 - assertEquals 对浮点数学并不健壮,稍后再担心...)

              最后,你应该创建一个骨架方法来实现算法,并一直工作直到测试成功。

              public static double areaOfCircle(double r) {
                 if (r < 0)
                    throw new IllegalArgumentException();  // or whatever...
                 double area = WHAT MATH DO YOU NEED HERE?
                 return area;
              }
              

              对您的其他方法遵循类似的过程。

              【讨论】:

                【解决方案10】:
                public static class Area 
                {
                
                    public static double getArea(double radius) 
                    {
                        return Math.PI * radius * radius;
                    }
                
                
                    public static double getArea(int length, int width) 
                    {
                        return length * width;
                    }
                
                
                    public static double getArea(double radius, double height) 
                
                    {
                        return Math.PI * radius * radius * height;
                    }
                
                }
                

                【讨论】:

                  猜你喜欢
                  • 2016-03-07
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-05-09
                  • 2023-04-08
                  • 2012-05-06
                  • 2012-08-29
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多