Ошибка NaN с калькулятором квадратного уравнения

Возникли проблемы с попыткой заставить этот код работать! Пожалуйста помоги!

package com.mtndewey.calculator;

import java.util.Scanner;

public class Calculator {

private static double inputA, inputB, inputC;

public static void main(String[] args) {

    final Scanner ScannerA = new Scanner(System.in);
    final Scanner ScannerB = new Scanner(System.in);
    final Scanner ScannerC = new Scanner(System.in);

    System.out.println("Enter the A value");
    final double inputA = ScannerA.nextDouble();
    System.out.println("Enter the B value");
    final double inputB = ScannerA.nextDouble();
    System.out.println("Enter the C value");
    final double inputC = ScannerA.nextDouble();

    getComponents(inputA, inputB, inputC);
    double[] answers = getAnswers();

    if (answers != null) {
        if (inputA == 0 && inputB != 0) {// if they input a linear equation
            System.out.print("This is a linear equation, x equals "
                    + (-inputC / inputB) + ".");
            System.exit(0);
        }
        if (inputA == 0 && inputB == 0 && inputC != 0) {// if they put just
                                                        // the constant
            System.out.print("No solution.");
            System.exit(0);

        }
        if (inputA == 0 && inputB == 0 && inputC == 0) {// if they put only
                                                        // zeros
            System.out.print("Zero equals zero.");
            System.exit(0);
        }
        if (answers[0] == answers[1] && inputA != 0) {// outputs only one
                                                        // for no repetition
            System.out.println("x equals: ");
            System.out.print(answers[0]);
            System.exit(0);
        }
        if (answers[0] != answers[1] && inputA != 0) {// normal input
            System.out.println("x equals: " + answers[0] + ", " + answers [1]);

        }

        else {
            System.out.println("Error");
        }
    }
    if (answers == null) {
        System.out.print("Imaginary answer!");
    }
}

public static double[] getComponents(double a, double b, double c) {

    double discriminant = (b * b) - (4 * a * c);
    double component1 = b * -1; // negative b
    double component2 = Math.sqrt(discriminant);
    double component3 = component2 / (2 * a);
    double[] components = { component1, discriminant, component3 };

    return components;

}

public static boolean isImaginary() {
    double[] components = getComponents(inputA, inputB, inputC);
    double discriminant = components[1];

    if (discriminant < 0) {
        return true;
    } else
        return false;
}

public static double[] getAnswers() {
    double[] components = getComponents(inputA, inputB, inputC);
    double component1, component3;
    component1 = components[0];
    component3 = components[2];

    if (isImaginary()) {
        return null;
    } else {// Answers

        double answerplus = component1 + component3;
        double answerminus = component1 - component3;
        double[] answers = { answerplus, answerminus };

        return answers;
    }
}

}


person Jon Dewey    schedule 14.01.2015    source источник
comment
Вы должны быть в состоянии избежать поста в основном кодового сообщения, если вы предоставите дополнительные подробности в своем посте, например, что такое a, b и c, когда происходит NaN. Я подозреваю, что NaN является результатом таких входных данных, которые описывают квадратное уравнение без действительных корней. Math.sqrt возвращает NaN, когда аргумент отрицательный.   -  person rgettman    schedule 14.01.2015
comment
Добро пожаловать в StackOverflow. Этот сайт может быть невероятно полезным, но также важно убедиться, что вы используете его правильно. Вы должны взглянуть на тур по сайту, чтобы убедиться, что вы понимаете, как здесь все работает, но просто чтобы убедиться, что вас не заминусовали - отредактируйте свой пост и постарайтесь предоставить как можно больше деталей и быть как можно более конкретным. вы можете быть, чтобы получить самую лучшую и точную поддержку   -  person badfilms    schedule 14.01.2015
comment
Пожалуйста, отредактируйте вопрос и объясните, почему он не работает.   -  person tbodt    schedule 14.01.2015
comment
когда вы получаете ошибку nan? для некоторых входов? каждый вход? для входов, которые должны иметь мнимые корни? для входов, которые не должны иметь мнимых корней? что такое com.mtndewey.calculator? этот пост в основном представляет собой предупреждение о коде, здесь очень уместно.   -  person chiliNUT    schedule 14.01.2015


Ответы (1)


По какой-то причине у вас есть 2 набора переменных с одинаковыми именами.

У вас есть static переменные inputA, inputB, inputC, которые никогда не назначаются (поэтому имейте значение по умолчанию 0.0).

У вас также есть переменные экземпляра inputA, inputB, inputC. Они назначаются с использованием введенных вами значений.

К сожалению, какие бы значения вы ни вводили, getAnswers использует версии static, поэтому component3 вычисляется из 0.0/0.0, которое равно NaN (не число).

person Paul Boddington    schedule 14.01.2015