我正在制作一个我今晚需要完成的程序,基本上它是一个cheep版本的因子... 问题是,它不是给我数字,而是NaN。 继承我的代码:
第1类(处理该计划的部分):
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());
第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;
}
继承人的输出:
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)
我如何解决这个问题,所以我得到了应该得到的输出? (x + 3.0)(x-1.0)
答案 0 :(得分:1)
在你的4-param构造函数Mathey()
(你正在调用的构造函数)中,你重新声明变量a, b, c
并分配传递给它们的值,屏蔽保持等于的实例变量0(默认值)。这些局部变量仅在构造函数的范围内。在solveA()
和solveB()
中,a, b, c
再次引用实例变量(均为0),因此除以2*a
= 0,这使{{1} }}和solution1
等于solution2
。
从
更改第二个构造函数中的行(如果继续使用它)NaN
到
double a = aN, b = bN, c = cN;
解决掩蔽问题。您很可能希望实例变量为a = aN, b = bN, c = cN;
而不是double
s,所以更改
int
到
int a;int b;int c;
(您可以像这样做多个相同类型的声明)。
我不知道为什么你有两个double a, b, c;
构造函数,所以要么废弃第二个(Mathey
)而只使用第一个,或者确保第二个也赋值到chooser?
。
无论如何,这应该是一个开始。
答案 1 :(得分:0)
您应该通过单元测试功能来检查您的代码是否可能。 例如,我注意到你使用了一个带有双号的{%}运算符。该运算符使用整数,并可以将NaN结果拖到结尾。
你也在mathey()中声明变量,然后尝试在solvea()solveb()中使用它们,它们不存在。