Реализация методов работы с геометрическими фигурами методами класса Math

Необходимо реализовать методы расчёта площади круга; площади треугольника; объёма шара и проверки возможности построения треугольника по трём длинам сторон. Протестировать решения, используя тесты. Два из четырех тестов успешны, но в двух других ошибки. В тесте метода getCircleSquare пишет что не передано отрицательное число -20. А в тесте метода getSphereVolume пишет что передан только 0 и отрицательное число -20, а положительные числа 20 и 20.2 не переданы. В чем мои ошибки? Вот код:

package practice;

public class GeometryCalculator {

// метод должен использовать абсолютное значение radius

public static double getCircleSquare(double radius) {

    return Math.PI * Math.pow(Math.abs(radius), 2);
}

// если значение radius меньше 0, метод должен вернуть -1
 public static double getSphereVolume(double radius) {
    if (radius < 0) { return -1; }
    else return 4 /3 * Math.PI * Math.pow(Math.abs(radius), 3);
}

public static boolean isTrianglePossible(double a, double b, double c) {
    if (a <= 0 || b <= 0 || c <= 0) {
        return false;
    } else return !(a + b <= c) && !(a + c <= b) && !(b + c <= a);
}

// перед расчетом площади рекомендуется проверить возможен ли такой треугольник
// методом isTrianglePossible, если невозможен вернуть -1.0
public static double getTriangleSquare(double a, double b, double c) {
    if (isTrianglePossible(a, b, c)) {
        double p = (a + b + c) / 2;
        return Math.sqrt(p * (p - a) * (p - b) * (p - c));
    } else return -1.0;
}

}

Ниже фотографии тестов. Тест getSphereVolume: введите сюда описание изображения Тест getCircleSquare: введите сюда описание изображения


Ответы (1 шт):

Автор решения: Nowhere Man

Судя по тесту, метод getCircleSquare должен возвращать -1.0 для отрицательных значений радиуса, как и в других методах.

В случае с вычислением объёма проблема в том, что в делении 4/3 используется целочисленное деление, так как оба аргументы являются целыми, поэтому данный коэффициент получается равным 1, а не 1.333... .

Нужно либо использовать хотя бы одну double константу 4.0/3, либо просто сначала использовать Math.PI. И ещё, если аргумент отдельно проверяется на отрицательность, то использовать Math.abs уже не надо:

public static double getCircleSquare(double radius) {
    if (radius < 0) { 
        return -1.0; 
    }

    return Math.PI * radius * radius;
}

public static double getSphereVolume(double radius) {
    if (radius < 0) { 
        return -1.0; 
    }
    return Math.PI * 4 * radius * radius * radius / 3;
}
→ Ссылка