Реализация методов работы с геометрическими фигурами методами класса 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 шт):
Судя по тесту, метод 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;
}