0

这是我到目前为止的代码。该项目的目标是让用户为方程输入任何整数a, b, 。出于某种原因,我没有得到输入到程序中的任何数字的正确根。谁能指出我的错误行为?cax^2+bx+c

import java.util.*;


public class Quad_Form {

public static void main(String[] args){

    Scanner sc = new Scanner(System.in);

    double a = 0;
    double b = 0;
    double c = 0;
    double discrim = 0;
    double d = 0;

    System.out.println("Enter value for 'a'");
    String str_a = sc.nextLine();
    a = Integer.parseInt(str_a);

    System.out.println("Enter value for 'b'");
    String str_b = sc.nextLine();
    b = Integer.parseInt(str_b);

    System.out.println("Enter value for 'c'");
    String str_c = sc.nextLine();
    c = Integer.parseInt(str_c);

    double x1 = 0, x2 = 0;
    discrim = (Math.pow(b, 2.0)) - (4 * a * c);
    d = Math.sqrt(discrim);

    if(discrim == 0){
        x1 = (-b + d) / (2* a);
        String root_1 = Double.toString(x1);
        System.out.println("There is one root at: " + root_1);
        }

    else {
        if (discrim > 0)
        x1 = (-b + d) / (2 * a);
        x2 = (-b - d) / (2 * a);
        String root_1 = Double.toString(x1);
        String root_2 = Double.toString(x2);
        System.out.println("There are two real roots at:"  + root_1 + "and"  + root_2);
        }

    if (discrim < 0){

        x1 = (-b + d) / (2 * a);
        x2 = (-b - d) / (2 * a);
        String root_1 = Double.toString(x1);
        String root_2 = Double.toString(x2);
        System.out.println("There are two imaginary roots at:" + root_1 + "and" + root_2);
        }
    }


}
4

2 回答 2

2

@Smit 关于其中一个问题是正确的,但还有第二个问题。

Math.sqrt(discrim)discrim为负数时不起作用。你应该Math.sqrt(Math.abs(discrim))取而代之。

于 2013-03-15T17:35:08.633 回答
1

a, b, c,d是双精度的,您将它们解析为整数。所以这可能是问题之一。

利用

 Double.parseDouble();

另一个问题是你不能做负数的平方根。这将导致NaN. 对于以下用途,但您应该正确处理以获得准确的结果。

  Math.sqrt(Math.abs());

此外,您应该使用以下公式来获取根源

根由二次公式给出[

取自维基百科二次方程

双班

数学课

于 2013-03-15T17:31:10.643 回答