0

これは私がこれまでに持っているコードです。プロジェクトの目標は、方程式のa、、に任意の整数をユーザーが入力できるようにすることです。何らかの理由で、プログラムに入力された数値の正しいルートを取得できません。誰かが私の間違ったことを指摘できますか?bcax^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は問題の1つについて正しいですが、2番目の問題もあります。

Math.sqrt(discrim)discrimが負の場合は機能しません。Math.sqrt(Math.abs(discrim))代わりに服用する必要があります。

于 2013-03-15T17:35:08.633 に答える
1

a、、、は doubleでありb、それらを整数として解析しています。したがって、これは問題の1つになる可能性があります。cd

使用する

 Double.parseDouble();

もう 1 つの問題は、負の数の平方根を作成できないことです。これにより、 が発生しNaNます。そのためには以下を使用しますが、正確な結果を得るにはそれを適切に処理する必要があります。

  Math.sqrt(Math.abs());

さらに、ルートを取得するには次の式を使用する必要があります

根は二次式[

ウィキペディアから引用二次方程式

クラスダブル

クラス数学

于 2013-03-15T17:31:10.643 に答える