【发布时间】:2016-02-28 14:01:36
【问题描述】:
我是 java 新手,需要帮助编写简化二次公式的代码。现在我的程序将两个解决方案截断到小数点后两位。但我不知道如何简化判别式的平方。例如,如果判别式是 8,那么我希望程序输出 2√2。能否请提供执行此操作所需的代码?
package quadraticprogram;
//This imports the DecimalFormat class, Scanner class, and all other Java classes.
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.*;
public class QuadraticProgram {
public static void main(String[] args) {
int a, A;
Scanner scan = new Scanner (System.in);
System.out.println ("Use integer value, enter minimum value of a:");
a = scan.nextInt();
System.out.println ("Use integer value, enter maximum value of A:");
A = scan.nextInt();
Random generator = new Random();
// Generate random integers in the range from a to A
// and assign them to numa, numb, and numc
double numa = generator.nextInt(A - a + 1) + a;
double numb = generator.nextInt(A - a + 1) + a;
double numc = generator.nextInt(A - a + 1) + a;
System.out.println ("numa" + numa);
System.out.println ("numb" + numb);
System.out.println ("numc" + numc);
// Define d as the discriminant and take its square root
double d;
d = ((numb*numb)-(4*numa*numc));
double r = Math.sqrt(d);
// Calculate the two solutions
double s = ((-numb + r)/(2*numa));
double S = ((-numb - r)/(2*numa));
// Truncate the two solutions to two decimal places.
DecimalFormat fmt = new DecimalFormat ("0.##");
// If the discriminant is negative there are no real solutions.
if (d<0) {
System.out.println("No Real Solutions");
} else {
// Print both solutions if the discriminant is not negative
System.out.print(fmt.format(s));
System.out.println("," + fmt.format(S));
}
}
}
现在程序让用户输入一个最小整数 a 和一个最大整数 A。然后生成介于 a 和 A 之间的随机双精度值 numa、numb 和 numc。然后程序计算判别式, d,作为双。然后取d的平方根,即r。然后程序完成计算两个解 s 和 S。然后程序打印两个解,如果判别式不小于 0,并将它们截断到小数点后两位。
【问题讨论】:
-
我不是数学(或 java)人,所以我会在错误的地方为您提供有关您最初问题的建议,但作为一名程序员,一般来说,我强烈建议您重新考虑你的变量命名策略。 2 个变量 (A, a) 持有不同的值且名称仅因大小写而异,这绝对是 WTF 类型反应的磁石,是长期可维护性的灾难(您是否应该编写更复杂的程序,这是需要考虑的)。我建议改为 (a, b) 或 (a1, a2)。
-
有什么理由使用双精度而不是整数或长整数?浮点数更难处理,你的例子暗示你想用整数或分数打印你的解决方案。