编写一种方法来查找形状数组中的最大表面积

时间:2013-09-09 23:56:09

标签: java arrays

我是Java的新手,我对这些方法需要做些什么的想法,我只是想把它转换成代码哈哈我觉得我只是混淆了哪个对象调用方法等等。

所以我正在尝试编写一个名为maxSurfaceArea的方法,该方法接收给定特定尺寸的形状数组,并找到具有最大表面积的形状。 所以我试图做的是将包含形状的第一个索引分配给currentSurfaceArea和maxSurfaceeArea。然后该方法需要转到数组的下一个索引,检查表面区域,如果它大于先前的maxSurfaceArea,则将该新形状分配给maxSurfaceArea,并重复所有直到数组结束。 在这个程序中,我在main方法类中调用此方法,但除此之外,我有一个名为Shape的类,其中没有任何内容。还有一个Circle,Triangle,Rectangle类(每个类都是一个单独的类),它们都是从Shape扩展而来的。还有一个Sphere类(从Circle扩展),Cylinder类(从Circle扩展),Prism类(从Rectangle扩展),Tetrahedron类(从Triangle扩展)。

每个类都有自己的.computeArea方法,它们由主类调用的toString方法输出。

我感到困惑的一件事是我知道我是否将maxSurfaceArea设为一个布尔值,它无法转换为“Shape”,因为这是它所采用的数组类型。 我只是不知道。任何帮助将不胜感激。

public static Shape[] shapeList;

public static void main (String[] args)
{  
  shapeList = new Shape[8];
  shapeList[0] = new Sphere(7.4);
  shapeList[1] = new Prism(5,4.5,4);
  shapeList[2] = new Tetrahedron(4,5);
  shapeList[3] = new Cylinder(3.14, 4.5);
  shapeList[4] = new Prism(1, 2, 3);
  shapeList[5] = new Tetrahedron(2.34, 3.56);
  shapeList[6] = new Sphere(2.5);
  shapeList[7] = new Cylinder(6.7, 3.3);
  for (int i = 0; i < shapeList.length; i++)
  {
    System.out.println(shapeList[i].toString());
  }
}

public static void maxSurfaceArea(Shape[] shapeList)
{
  boolean maxSurfaceArea, currentSurfaceArea;
  for (int i = 0; i < shapeList.length; i++)
  {
    currentSurfaceArea = (shapeList[i]); 
                maxSurfaceArea = (shapeList[i])
    if (shapeList[i].computeArea() > )
    {

    }
  }

2 个答案:

答案 0 :(得分:3)

让你的方法更有用的是返回形状。然后调用者可以随心所欲地执行任何操作,在您的情况下只需打印该区域。

/**
 * Return the Shape that has the largest surface area.  If two shapes
 * have the same area, the first in the list is returned.
 * If empty array is passed, null is returned.
 */
public static Shape maxSurfaceArea(Shape[] shapeList)
{
  Shape max;
  for (Shape shape : shapeList) {
    if (max == null) {
      // first time through
      max = shape;
    } else if (shape.computeArea() > max.computeArea()) {
      max = shape;
      /* If really worried about performance you could store the result of
       * max.computeArea() in a local var and use that in the next loop.
       */
    }
  }
  return max;
}

答案 1 :(得分:1)

为什么你有maxSurfaceArea和currentSurfaceArea作为布尔值?什么是maxSurfaceArea方法究竟要做什么?打印出最大形状?

这样做:

public static void maxSurfaceArea(Shape[] shapeList)
{
    // Here we will store the max area 
    double max = 0;

    // Here we will store the index of max Shape from the array
    int index;

    // Now we loop the array and check each of our Shapes
    foreach(int i = 0; i < shapeList.length; i++)
    {

        // Now we check if current Shape size is bigger
        // Than current max
        if(shapeList[i].computeArea() > max)
        {
            // If it's greater than we store it
            max = shapeList[i].computeArea();
            index = i;
        }
    }

    // Now you can print out the largest Shape
    System.out.println(shapeList[index].toString());
}

由于您正在尝试确定shapesList数组中哪一个形状具有最大的表面区域,因此您无法真正使用布尔值,因为布尔值只能采用true或false值。

此外,您有一个Shapes数组,数组中的每个值都是Shape类型,并且无法将其分配给maxSurfaceAreacurrentSurfaceArea,因为它们都不是Shape类型。

您遇到的第二个问题是当您循环数组并比较变量时,实际上无法将方法computeArea()返回的整数/ double值与maxSurfaceArea进行比较。

所以你有三大问题:
1)变量类型不正确
2)不可能的价值分配
3)没有适当的比较变量