/*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

解决方案 »

  1.   

    x1 = (-b + Math.sqrt(root))/(2*a); 
    x2 =  (-b - Math.sqrt(root))/(2*a);括号不能丢啊. 
      

  2.   

    公式分母那里要加括号
    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("无实数根!");
    }}