/*1、 编写一个Java应用程序,在其中编写一个类,该类封装了一元二次方程共有的属性和功能,
* 即该类有刻画方程系数的3个成员变量以及计算实根的方法。并给出计算实根的过程。*/
import java.util.*;
public class n4AT1
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.print("请输入a,b,c:");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
new equation().solve(a, b, c);
}}
class equation
{
private double a = 0;
private double b = 0 ;
private double c = 0 ;
private double root = 0;
private double x1 = 0;
private double x2 = 0;
public void solve(double a,double b,double c)
{
root = b*b - 4*a*c;
if(root > 0)
{
x1 = (-b + Math.sqrt(root))/2*a;
x2 = (-b - Math.sqrt(root))/2*a;
System.out.println("x1="+x1+"\tx2="+x2);
}
else if(root == 0)
{
x1 = x2 = -b/(2*a);
System.out.println("x1="+x1+"\tx2="+x2);
}
else
System.out.println("无实数根!");
}
}
root <= 0时都可以达到达到预期结果
可是为什么当root > 0时,求根会求错?公式都对的啊!
比如3*x*x + 2*x - 16 =0这个方程,即输入3,2,-16,很明显有一个实根是2,但是打印结果却是:
请输入a,b,c:3
2
-16
x1=18.0 x2=-24.0
x2 = (-b - Math.sqrt(root))/(2*a);括号不能丢啊.
import java.util.*;public class n4AT1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入a,b,c:");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
new equation().solve(a, b, c);
}}class equation {
private double a = 0;
private double b = 0;
private double c = 0;
private double root = 0;
private double x1 = 0;
private double x2 = 0; public void solve(double a, double b, double c) {
root = b * b - 4 * a * c;
System.out.println(root);
if (root > 0) {
x1 = (-b + Math.sqrt(root)) / (2 * a);//加括号
x2 = (-b - Math.sqrt(root)) / (2 * a);//加括号
System.out.println("x1=" + x1 + "\tx2=" + x2);
} else if (root == 0) {
x1 = x2 = -b / (2 * a);
System.out.println("x1=" + x1 + "\tx2=" + x2);
} else
System.out.println("无实数根!");
}}