2015-01-14 3 views
0

Ошибка при работе с данным кодом! Пожалуйста помоги!Ошибка 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; 
    } 
} 

}

+1

Вы должны быть в состоянии избежать сообщения «сообщение в основном код», если вы дадите дополнительные сведения в своем сообщении, например, '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Я подозреваю, что «NaN» является результатом таких входов, которые описывают квадратичное уравнение без реальных корней. 'Math.sqrt' возвращает' NaN', когда аргумент отрицательный. – rgettman

+1

Добро пожаловать в StackOverflow. Этот сайт может быть невероятно полезным, но также важно убедиться, что вы используете его правильно. Вы должны взглянуть на тур по сайту, чтобы убедиться, что вы понимаете, как все работает здесь, но просто для того, чтобы убедиться, что вы не получите ниспадающего голоса - отредактируйте свой пост и постарайтесь предоставить как можно больше подробностей и быть таким же конкретным, как вы можете быть в порядке, чтобы получить лучшую и точную поддержку – badfilms

+0

Пожалуйста, отредактируйте этот вопрос и объясните, почему он не работает. – tbodt

ответ

0

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

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

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

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

+1

спасибо, человек, которого вы рок –

Смежные вопросы