eecenja - 1 year ago 71
Java Question

# Quadratic Formula returns NaN, even when negative radical is accounted for

This question is for my intro to Java class and the question is asking me to use classes to solve a quadratic equation.

I am trying to fix my class so that it doesn't return NaN. I have used

`Math.abs()`
to try and fix any situation where the number under the radical would be a negative number, but I'm still getting NaN. Here is my code for the class:

``````    public class Quadratic
{
//Private data members
private double a;
private double b;
private double c;
private double posX;
private double negX;

//Deafault constructor
{
a = 1;
b = 0;
c = 0;
posX = 0;
negX = 0;
}

//The mutators
public void setQuad(Double alpha, double bravo, double charlie)
{
alpha = a;
bravo = b;
charlie = c;
}

//The accessors
{
double temp = (Math.pow(b, 2) - (4 * a * c));//getting the number inside the root

if(temp < 0)
temp = Math.abs(temp);
//ensures that the function can run until complex numbers are sorted

posX = (-b + (Math.sqrt(temp)))/(2 * a);//calculates when added
negX = (-b + (Math.sqrt(temp)))/(2 * a);//calculates when subtracted
//error: Keep getting NaN for answers, already accounted for negative inside the root
//       not a 0 in the descriminant.
return 0;
}

//My toString which is what will be output at System.out.println(N)
public String toString()
{
if(negX == posX)
return "X = "+ negX;
else
return "X = "+ negX +" and "+ posX;
}
}
``````

Is my math incorrect, or am I using the math utilities incorrectly?

1. Your construct was assigning your fields to the local parameters in the constructor
2. usually you would want to allow th ability to assign fields from constructor, thus i put one in
3. Your negX assignment was the same as posX
5. Your accesor getQuad wasn't really an accesor, it was more of a mutator changing posX and negX, implemented what accessors would be below

public class Quadratic { private double a; private double b; private double c; private double posX; private double negX;

``````//Default constructor
{
//1.
a = 0;
b = 0;
c = 0;
posX = 0;
negX = 0;
}

public Quadratic(double a, double b, double c){
//2.
this.a = a;
this.b = b;
this.c = c;
this.posX = 0;
this.negX = 0;
}

//The mutators
public void setQuad(Double alpha, double bravo, double charlie)
{
a = alpha;
b = bravo;
c = charlie;
}

{
//4.
double temp = (Math.pow(b, 2) - (4 * a * c));//getting the number inside the root

if(temp < 0)
temp = Math.abs(temp);
//ensures that the function can run until complex numbers are sorted

posX = (-b + (Math.sqrt(temp)))/(2 * a);

//3.
negX = (-b - (Math.sqrt(temp)))/(2 * a);
}

//Accesors  5.
public double getA(){
return this.a
}

public double getB(){
return this.b
}

public double getC(){
return this.c
}
//Overriding toString
public String toString()
{
if(negX == posX)
return "X = "+ negX;
else
return "X = "+ negX +" and "+ posX;
}
``````

}

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download