2

我对Java真的很陌生,我知道我需要为这些方法做什么,我只是想把它翻译成代码哈哈我想我只是对哪个对象正在调用方法等感到困惑等等。

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

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

我感到困惑的一件事是我知道如果我将 maxSurfaceArea 设为一个布尔值,它就不能转换为“形状”,因为这是它所接受的数组类型。我只是不知道。任何帮助将非常感激。

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() > )
    {

    }
  }
4

2 回答 2

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;
}
于 2013-09-10T00:26:53.207 回答
1

为什么你有 maxSurfaceArea 和 currentSurfaceArea 作为 boolean ?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数组中的哪一个形状具有最大的表面积,因此您不能真正使用布尔值,因为布尔值只能取真值或假值。

此外,您还有一个 Shapes 数组,数组中的每个值都是 Shape 类型,并且不能分配给其中任何一个,maxSurfaceArea或者currentSurfaceArea因为它们都不是 Shape 类型。

您遇到的第二个问题是,当您循环数组并比较变量时,实际上无法比较从方法返回的整数/双精度值computeArea()maxSurfaceArea.

所以你在这里有 3 个大问题:
1)不正确的变量类型
2)不可能的值赋值
3)没有正确的比较变量

于 2013-09-10T00:22:03.747 回答