Im working on a program I need to finish tonight, and basically it does a cheep version of factoring…
The problem is, that its not giving me numbers, but NaN.
Heres my code:
Class 1(Part that deals with this program):
System.out.println("--------------------------------------------------");
System.out.println(" ~Factoring~");
System.out.println("--------------------------------------------------");
System.out.println("in a polynomial, there are 3 important numbers used");
System.out.println("to figure out x. they are a, b, and c, shown below.\n");
System.out.println("\t\t1x^2 +2x -3");
System.out.println("\t\t^ ^ ^");
System.out.println("\t\ta b c");
System.out.print("\nPlease type a, b, and c here[a b c]: ");
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
mathey factor = new mathey(a,b,c, chooser);
System.out.print(factor.solvefact());
Class 2:
public class mathey
{
double a,b,c;
double solution1;
double solution2;
double discriminant;
double x1 = 0;
double x2 = 0;
public mathey(int aN, int bN, int cN)
{
a = aN;
b = bN;
c = cN;
discriminant = (b*b)-4*a*c;
solvea();
solveb();
}
public String solvea()
{
solution1 = (-1*b + Math.sqrt(discriminant))/(2*a);
x1 = solution1;
if(discriminant > 0)
{
return"x = " + solution1;
}
else if(discriminant == 0)
{
return "x = " + solution1;
}
else
{
double root1complex = -b/(2*a);
double root1complex2 = Math.sqrt(-discriminant)/(2*a);
return root1complex + " + " + root1complex2 + " i ";
}
}
public String solveb()
{
solution2 = (-1*b - Math.sqrt(discriminant))/(2*a);
x2 = solution2;
if(discriminant > 0)
{
return"x = " + solution2;
}
else if(discriminant == 0)
{
return"x = " + solution2;
}
else
{
double root1complex = -b/(2*a);
double root1complex2 = Math.sqrt(-discriminant)/(2*a);
return root1complex + " - " + root1complex2 + " i ";
}
}
public mathey(int aFact, int bFact ,int cFact, int chooser)
{
a = aFact; b = bFact; c = cFact;
discriminant = (b*b)-4*a*c;
solvea();
solveb();
solvefact();
}
public String solvefact()
{
String Answer = "";
if((int)solution1 == solution1)
{
int wholeNum = (int)solution1/1;
double numerator = (solution1%1) * 10;
int denominator = 10;
while(numerator > denominator) {
denominator = denominator * 10;
}
Answer+="("+denominator+"x + "+((denominator * wholeNum) + numerator)+")";
}
else
{
Answer +="( x + " +(solution1*-1) +")";
}
if((int)solution2 == solution2)
{
int wholeNum = (int)solution2/1;
double numerator = (solution2%1) * 10;
int denominator = 10;
while(numerator > denominator) {
denominator = denominator * 10;
}
Answer+="("+denominator+"x + "+((denominator * wholeNum) + numerator)+")";
}
else
{
Answer +="( x + " +(solution2*-1) +")";
}
return Answer;
}
Heres the output:
Choose a Way to Solve
1. Quadratic Formula
2. Factoring
Which Method? [1/2]: 2
--------------------------------------------------
~Factoring~
--------------------------------------------------
in a polynomial, there are 3 important numbers used
to figure out x. they are a, b, and c, shown below.
1x^2 +2x -3
^ ^ ^
a b c
Please type a, b, and c here[a b c]: 1 2 -3
(10x + 10.0)(10x + -30.0)
How Do I fix this, so I get the Output I should get? (x + 3.0)(x-1.0)
In your 4-param constructor
Mathey()(which is the constructor you are calling) you are redeclaring the variablesa, b, cand assigning the values passed in to them, masking the instance variables which remain equal to 0 (the default). These local variables are only in scope in the constructor. InsolveA()andsolveB(),a, b, cagain refer to the instance variables (which are all 0), so you’re dividing by2*a= 0, which makessolution1andsolution2equal toNaN.Change the line in the second constructor (if you continue to use it) from
to
to solve the masking issue. You most likely want the instance variables to be
doubles rather thanints, though, so changeto
(you can do multiple declarations of the same type like this).
I don’t know why you have two
Matheyconstructors, so either scrap the second one (what ischooser?) and just use the first, or make sure the second one also assigns a value todeterminant.This should be a start, anyway.