2013-09-09 3 views
2

Я действительно новичок в Java, и у меня есть идея, что мне нужно сделать для этих методов, я просто пытаюсь перевести это в код haha Я думаю, что я просто запутался, какой объект вызывает методы и т. д. и т. д.Написание метода для определения максимальной площади поверхности в массиве форм

Итак, я пытаюсь написать метод maxSurfaceArea, который принимает массив фигур, которым заданы конкретные размеры, и находит форму, которая имеет максимальную площадь поверхности. Итак, что я пытался сделать, это присвоить первый индекс, который содержит форму currentSurfaceArea и maxSurfaceeArea. Затем метод должен перейти к следующему индексу массива, проверить площадь поверхности, если он больше, чем предыдущий maxSurfaceArea, затем назначить эту новую форму maxSurfaceArea и повторить все до конца массива. В этой программе я вызываю этот метод в основном классе методов, но вне этого у меня есть класс под названием Shape, который в нем ничего не имеет. Также классы Circle, Triangle, Rectangle (каждый отдельный класс), которые все простираются от Shape. Также класс Sphere (продолжается от Circle), класс Cylinder (продолжается от круга), класс Prism (простирается от Rectangle), класс Tetrahedron (продолжается от треугольника).

Каждый из классов имеет свои собственные методы .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

Что вы хотите вернуть для 'maxSurfaceArea()'? «Форма»? Область?Возвращаемый тип 'void' на самом деле не имеет смысла. – nhahtdh

ответ

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

Почему у вас есть maxSurfaceArea и currentSurfaceArea как boolean? И какой именно метод maxSurfaceArea soposed делать? Вывести максимальную форму?

ли это:

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) Нет надлежащего сравнения переменной

+0

hahaha! Мне жаль, что я случайно опубликовал предыдущее редактирование, которое не было полным. Мне очень жаль! Но, спасибо, так много! Один быстрый вопрос, так что .computeArea отличается для каждого дочернего класса, поэтому, когда я просто поместил shapeList [i] .computeArea(), он говорит, что метод не определен для класса Shape. У меня должно быть пустое. Как я могу вызвать computeArea для каждого индекса массива, когда он отличается для каждого дочернего класса? Если бы все это имело смысл? – user2762979

Смежные вопросы