Java 我能';I don’我不知道如何找到这两个虚数

Java 我能';I don’我不知道如何找到这两个虚数,java,numbers,quadratic,quadratic-programming,repl.it,Java,Numbers,Quadratic,Quadratic Programming,Repl.it,所以,我写了一个Java程序,它可以找到一个二次方程的解,我的问题是,当它打印出来时,我似乎无法编写正确的代码来找到“虚数”,我只得到了“NaN”。有什么解决办法吗 import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("Enter

所以,我写了一个Java程序,它可以找到一个二次方程的解,我的问题是,当它打印出来时,我似乎无法编写正确的代码来找到“虚数”,我只得到了“NaN”。有什么解决办法吗

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    
    Scanner scan = new Scanner(System.in);
    
    System.out.print("Enter the value for a: ");
    double a = scan.nextDouble();
    
    System.out.print("Enter the value for b: ");
    double b = scan.nextDouble();
    
    System.out.print("Enter the value for c: ");
    double c = scan.nextDouble();
    
    double result = b * b - 4.0 * a * c;
    
    if(result > 0.0){

      //to find two real solutions

      double x1 = (-b + Math.pow(result, 0.5)) / (2.0 * a);
      double x2 = (-b - Math.pow(result, 0.5)) / (2.0 * a);
      
      System.out.println("There are two real solutions.");
      System.out.println("x1 = " + x1);
      System.out.println("x2 = " + x2);
      
      //to find one real solution

    } else if(result == 0.0){
      double x1 = (-b / (2.0 * a));
      System.out.println("There is one real solution");
      System.out.println("x = " + x1);

      //to find the imaginary numbers

    } else if(result < 0.0){
      double x1 = (-b + Math.pow(result, 0.5)) / (2.0 * a);
      double x2 = (-b - Math.pow(result, 0.5)) / (2.0 * a);
      
      System.out.println("There are two imaginary solutions.");
      System.out.println("x1  = " + x1 + " + " + x2);
      System.out.println("x2  = " + x1 + " - " + x2);
    }
    
  }
}
import java.util.Scanner;
班长{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.print(“输入a:”的值);
double a=scan.nextDouble();
System.out.print(“输入b:”的值);
double b=scan.nextDouble();
System.out.print(“输入c:”的值);
double c=scan.nextDouble();
双结果=b*b-4.0*a*c;
如果(结果>0.0){
//找到两个真正的解决方案
双x1=(-b+数学功率(结果,0.5))/(2.0*a);
双x2=(-b-数学功率(结果,0.5))/(2.0*a);
System.out.println(“有两个真正的解决方案”);
System.out.println(“x1=”+x1);
System.out.println(“x2=”+x2);
//找到一个真正的解决方案
}否则如果(结果==0.0){
双x1=(-b/(2.0*a));
System.out.println(“有一个真正的解决方案”);
System.out.println(“x=”+x1);
//求虚数
}否则如果(结果<0.0){
双x1=(-b+数学功率(结果,0.5))/(2.0*a);
双x2=(-b-数学功率(结果,0.5))/(2.0*a);
System.out.println(“有两个假想的解决方案”);
System.out.println(“x1=”+x1+“+”+x2);
System.out.println(“x2=”+x1+“-”+x2);
}
}
}

在处理复杂根时(当结果<0时),代码中有一些不正确的地方:

  • 您正在尝试计算
    结果的平方根,该平方根为负值。这将导致NaN。正确的方法是获得
    -result
    的平方根,以获得答案
  • 计算根的方法不正确。两个根的实部相同,即
    -b/(2*a)
    ,虚部的值相同,只是符号不同
  • 我修复了下面的代码以提供正确的输出。计算实部,然后计算虚部。然后,用虚数部分的后缀“i”打印根,以表示虚数部分

    double real = -b / (2*a);
    double imag = Math.pow(-result, 0.5) / (2.0 * a);
    
    System.out.println("There are two imaginary solutions.");
    System.out.println("x1  = " + real + " + " + imag + "i");
    System.out.println("x2  = " + real + " - " + imag + "i");
    

    在处理复杂根时(当结果<0时),代码中有一些不正确的地方:

  • 您正在尝试计算
    结果的平方根,该平方根为负值。这将导致NaN。正确的方法是获得
    -result
    的平方根,以获得答案
  • 计算根的方法不正确。两个根的实部相同,即
    -b/(2*a)
    ,虚部的值相同,只是符号不同
  • 我修复了下面的代码以提供正确的输出。计算实部,然后计算虚部。然后,用虚数部分的后缀“i”打印根,以表示虚数部分

    double real = -b / (2*a);
    double imag = Math.pow(-result, 0.5) / (2.0 * a);
    
    System.out.println("There are two imaginary solutions.");
    System.out.println("x1  = " + real + " + " + imag + "i");
    System.out.println("x2  = " + real + " - " + imag + "i");
    

    你能添加一个你测试和预期输出的例子吗?顺便说一句,没有必要将
    结果
    提高到0.5次方。有一个方法。你能添加一个你测试过的和预期输出的例子吗?顺便说一下,没有必要将
    结果
    提高到0.5次方。有一种方法,它必须是
    double real=-b/(2*a)
    ,也可以在计算虚部时使用
    Math.sqrt
    函数。是的,正确,我忘记了正确的公式。更新了答案。它必须是
    double real=-b/(2*a)
    ,也可以在计算虚部时使用
    Math.sqrt
    函数。是的,正确,我忘记了正确的公式。更新了答案。