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 для их получения.

Другие вопросы по тегам