Java

Формула Герона ( что то не так)

У меня тут проблема с формулой Герона для треугольника .
код :

public class Triangle extends Shape {
private double z;
Point point = new Point();

public double getZ() {
return z;
}

public void setZ(double z) {
this.z = z;
}

@Override
double getPerimetr() {
double p = point.getX() + point.getY() + z;
return p;
}

@Override
double getArea() {
double p = (point.getX() + point.getY() + z) / 2;
double s = Math.sqrt(p * (p - point.getX()) * (p - point.getY()) * (p - z));
return s;
}

}

При вызове метода getArea() в главном методе Main формула выводит на экран результат NaN . Класс треугольник проверяла, все три значения сторон в него записываются . Не могу понять что не так, формула вроде бы правильно, 5 раз перепроверила, а считать не хочет!
ну, треугольник образуют не любые тройки чисел
только если x < y+z, y < x+z, z < x+y, x > 0, y > 0, z > 0, можно пользоваться формулой Герона
Олег Кондратов
Олег Кондратов
78 962
Лучший ответ
Анатолий Ювченко спасибо человек. выручил) все получилось)
Ruskа Guliаеv Можно проще: x < p, y < p, z < p. Где p - тот самый полупериметр, который и так надо вычислять для формулы Герона.
Начни с того, что у тебя треугольник состоит из точки и какого-то З - так дела не делаются: либо точки, либо стороны, либо и то и другое вместе.
А твой НаН - это вычисление корня из отрицательного значения. Почему так получается, поможет узнать пошаговая отладка.
Анатолий Ювченко даже если в double p просто вписать положительное число, к примеру 27, то все равно будет НаН.
Объект pt уже хранит в себе 2 точки а z это третья! так тчо там все ок, проблема в чем то другом
перед тем как корень извлекать -- выведи на печать что именно ты туда засунуть пытаешься и убедись что это действительно число\

и соглашусь с Jurijus Zaksas
у тебя в классе треугольника всего одна точка и какая-то Зю малопонятная.

или у тебя все треугольники прямоугольные и все в первой четверти координатной плоскости? тогда нахрена зю нужно?
Nikolay Shilo
Nikolay Shilo
57 133
NaN (англ. Not-a-Number) — одно из особых состояний числа с плавающей запятой. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом, или если в ячейку памяти попало не удовлетворяющее условиям число.

К операциям, приводящим к появлению NaN в качестве ответа, относятся:

все математические операции, содержащие NaN в качестве одного из операндов;
деление нуля на нуль;
деление бесконечности на бесконечность;
умножение нуля на бесконечность;
сложение бесконечности с бесконечностью противоположного знака;
вычисление квадратного корня отрицательного числа;
логарифмирование отрицательного числа.

вероятно ошибка в формуле, проверяйте результат на всех этапах, путем вывода в клнсоль
*данабек *
*данабек *
1 556