Java-класс для квадратного уравнения
Я работаю в java для школы, и до сих пор у меня были некоторые проблемы с тем, чтобы обдумать занятия и проблемы с домашними заданиями для них. У меня есть следующие критерии для класса Quadratic Equation:
Пока что у меня есть:
private static double coefA;
private static double coefB;
private static double coefC;
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Please enter the a, b and c for a Quadratic: ");
coefA = input.nextDouble();
coefB = input.nextDouble();
coefC = input.nextDouble();
double discriminant = getDiscriminant();
if (discriminant < 0)
{
System.out.println("There are no real roots.");
}
else if (discriminant == 0)
{
System.out.println("The one root is: "+getRoot1());
}
else
{
System.out.println("The first root is: "+getRoot1());
System.out.println("The second root is: "+getRoot2());
}
}
//Construct
public QuadraticEquation(double a, double b, double c)
{
coefA = a;
coefB = b;
coefC = c;
}
private static double getDiscriminant()
{
double discriminant = (coefB * coefB) - (4 * coefA * coefC);
return discriminant;
}
static double getRoot1()
{
double root1 = (-coefB + Math.sqrt(getDiscriminant()))/ 2 * coefA;
return root1;
}
static double getRoot2()
{
double root2 = (-coefB - Math.sqrt(getDiscriminant()))/ 2 * coefA;
return root2;
}
}
Уравнение не работает, и я даже не думаю, что я соответствую критериям, но я не совсем понимаю, о чем просит книга. Кто-нибудь может помочь?
2 ответа
Реализация вашего математического уравнения верна, но вы должны заключить в скобки. Например;
double root1 = (-coefB + Math.sqrt(getDiscriminant()))/ 2 * coefA;
Вот (-coefB + Math.sqrt(getDiscriminant()))
Уравнения делится на 2
, После этого умножения с coefA
, Будь осторожен. Измените свою логику с этим примером;
double root1 = (-coefB + Math.sqrt(getDiscriminant()))/ (2 * coefA);
Поэтому примените к другим полям, чтобы получить правильный результат.
Ваши два метода должны быть изменены.
static double getRoot1()
{
double root1 = (-coefB + Math.sqrt(getDiscriminant()))/ (2 * coefA);
return root1;
}
static double getRoot2()
{
double root2 = (-coefB - Math.sqrt(getDiscriminant()))/ (2 * coefA);
return root2;
}
Более подробно, таблица приоритетов операторов;
Operators Precedence Associativity
postfix increment and decrement ++ -- left to right
prefix increment and decrement, and unary ++ -- + - ~ ! right to left
multiplicative * / % left to right
additive + - left to right
Это не очень хороший дизайн для класса QuadraticEquation. Три переменные (coefA, coefB, coefC) должны быть переменными экземпляра, а не статическими. У вас должен быть конструктор, который принимает три значения в качестве входных данных. Для конструктора гораздо эффективнее вызывать getDiscriminant() и вычислять два возможных ответа, а также использовать getter для их получения.