0

これは私のメインクラスです:

import java.util.Scanner;

public class calc {
public static void main(String[] args){
    Scanner variablea = new Scanner(System.in);
    Scanner variableb = new Scanner(System.in);
    Scanner variablec = new Scanner(System.in);
    int a1, b1, c1;
    System.out.println("enter your 'A' variable");
    a1 = variablea.nextInt();
    System.out.println("enter your 'B' variable");
    b1 = variableb.nextInt();
    System.out.println("enter your 'C' variable");
    c1 = variablec.nextInt();

    algorithm algorithmObject = new algorithm();
    algorithmObject.algorithm(a1, b1, c1);

}

}

そしてこれが2つ目

      public class algorithm{
public void algorithm(int a, int b, int c){
    double x1;
    double square = Math.sqrt(b*b - 4*a*c);
    double numerator = b*-1 + square;
    double finalanswer = numerator/2*a;

    System.out.println(finalanswer);
}

}

Eclipse ではエラーは表示されませんが、3 つの変数を要求されて入力すると、NaN が返されます。私が間違ったことをしたことはありますか?

4

3 に答える 3

2

コードに問題がありますが、原因は次の行である可能性が最も高いです。

double square = Math.sqrt(b*b - 4*a*c);

が負の場合b*b - 4*a*c(方程式の解がない場合)、square は NaN であり、それを含むすべての計算も NaN になります。ここで確認できます。


計算機を改善するには、最初b*b - 4*a*c < 0にそうであるかどうかを確認してから、実際の解決策がないことをコンソールに書き込むことができます (もちろん、そこで計算を停止します)。


私はに変更public void algorithm(int a, int b, int c)します

public void algorithm(double a, double b, double c)

整数演算は、あなたが最も予想していなかったときにあなたを驚かせる可能性があり、私にはその理由がわかりaません。bcint


OK、これがお役に立てば幸いです。

于 2013-05-04T19:38:33.430 に答える
1

注意が必要な特殊なケースがいくつかあります。あなたはそれらのいずれにも注意を払っていないようです:

y = a*x^2 + b*x + c
  1. 二次係数aがゼロの場合、方程式は線形であるため、根は 1 つだけですy = b*x + c
  2. 線形係数bがゼロの場合、2 つの根があります。[x1, x2] = +/-sqrt(c)
  3. 定数係数cが 0 の場合、根の 1 つが 0 で、もう 1 つが です-b/a

判別式が負の場合、2 つの複素共役根があります。

興味深いことに、これらの状況はすべて、減衰調和運動や LCR 回路などの物理問題の解決に意味を持ちます。あなたもそれらについて何かを学ぶべきです。

于 2013-05-04T23:48:42.700 に答える