Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的二次方程求解器无法获得结果_Java_Quadratic - Fatal编程技术网

Java中的二次方程求解器无法获得结果

Java中的二次方程求解器无法获得结果,java,quadratic,Java,Quadratic,我有一个代码,应该是解决一个二次方程,但结果是NaN 我已经找了两天了,找不到解决办法。任何和所有的建议将不胜感激 package quadratic; import java.util.Scanner; public class Formlua { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println(

我有一个代码,应该是解决一个二次方程,但结果是NaN

我已经找了两天了,找不到解决办法。任何和所有的建议将不胜感激

package quadratic;

import java.util.Scanner;

public class Formlua {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("enter value of A ");
        double a = input.nextDouble();
        System.out.println("enter value of B ");
        double b = input.nextDouble();
        System.out.println("enter value of C ");    
        double c = input.nextDouble();
        double four = 4;
        double square = Math.sqrt(b* b - 4 * a * c );

        double root1 = (-b + square) / (2*a);

        double root2 = (-b - square) / (2*a);   
        System.out.println("The answer is " + root1 + "and" + root2);

        System.out.println("Do you want to continue? y/n");

        String user = input.toString();
        if(user.equalsIgnoreCase("y"));
    }
}
此代码:

Math.sqrt(b* b - 4 * a * c );
可能导致
NaN
(“不是数字”)

如果
b*b-4*a*c
的值为负数,则只有复数解(而不是双精度数据类型)

应该有一个条件

if (b* b - 4 * a * c<0) {
    System.out.println("There is no solution in real numbers");
    return;
}
if(b*b-4*a*c此代码:

Math.sqrt(b* b - 4 * a * c );
可能导致
NaN
(“不是数字”)

如果
b*b-4*a*c
的值为负数,则只有复数解(而不是双精度数据类型)

应该有一个条件

if (b* b - 4 * a * c<0) {
    System.out.println("There is no solution in real numbers");
    return;
}

if(b*b-4*a*c问题最可能的原因是Math.sqrt(b*b-4*a*c)。或者您的输入值之一是NaN(在这种情况下可能不是原因)

有两种特殊情况: b*b<4*a*c a=0

如果b*b<4*a*c,你的答案在复平面上(具体来说,不是实数)。 如果a=0,那么实际上只有一个线性方程

您可以尝试以下代码:

package quadratic;
import java.util.Scanner;
public class Formlua {
  public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("enter value of A ");
    double a = input.nextDouble();

    System.out.println("enter value of B ");
    double b = input.nextDouble();

    System.out.println("enter value of C ");    
    double c = input.nextDouble();

    if (a == 0){
      // 0 = 0*x*x + b*x + c  ==> x = -c/b
      System.out.println("X = " + Double.toString(-c/b));
    } else {
      double inner = b * b - 4 * a * c;
      if (inner < 0){
        inner = -inner;
        inner = Math.sqrt(inner);
        System.out.println("X = " + Double.toString(-b) + " + " + Double.toString(inner) + "i")
        System.out.println("  = " + Double.toString(-b) + " - " + Double.toString(inner) + "i");
      } else {
         inner = Math.sqrt(inner);
           System.out.println("X = " + Double.toString(-b));
         if (inner == 0){
         } else {
           System.out.println("X = " + Double.toString(-b + inner));
           System.out.println("X = " + Double.toString(-b - inner));
      }
    }
  }
}
package;
导入java.util.Scanner;
公共类表格{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入A的值”);
double a=input.nextDouble();
System.out.println(“输入B的值”);
double b=input.nextDouble();
System.out.println(“输入C的值”);
double c=input.nextDouble();
如果(a==0){
//0=0*x*x+b*x+c=>x=-c/b
System.out.println(“X=“+Double.toString(-c/b));
}否则{
双内=b*b-4*a*c;
如果(内部<0){
内部=-内部;
内部=Math.sqrt(内部);
System.out.println(“X=“+Double.toString(-b)+“+”+Double.toString(内部)+“i”)
System.out.println(“=”+Double.toString(-b)+“-”+Double.toString(内部)+“i”);
}否则{
内部=Math.sqrt(内部);
System.out.println(“X=“+Double.toString(-b));
如果(内部==0){
}否则{
System.out.println(“X=“+Double.toString(-b+inner));
System.out.println(“X=“+Double.toString(-b-内部));
}
}
}
}

这允许用户输入任何双精度值并收到答案。

问题最可能的原因是Math.sqrt(b*b-4*a*c)。或者输入值之一是NaN(在这种情况下可能不是原因)

有两种特殊情况: b*b<4*a*c a=0

如果b*b<4*a*c,你的答案在复平面上(具体来说,不是实数)。 如果a=0,那么实际上只有一个线性方程

您可以尝试以下代码:

package quadratic;
import java.util.Scanner;
public class Formlua {
  public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("enter value of A ");
    double a = input.nextDouble();

    System.out.println("enter value of B ");
    double b = input.nextDouble();

    System.out.println("enter value of C ");    
    double c = input.nextDouble();

    if (a == 0){
      // 0 = 0*x*x + b*x + c  ==> x = -c/b
      System.out.println("X = " + Double.toString(-c/b));
    } else {
      double inner = b * b - 4 * a * c;
      if (inner < 0){
        inner = -inner;
        inner = Math.sqrt(inner);
        System.out.println("X = " + Double.toString(-b) + " + " + Double.toString(inner) + "i")
        System.out.println("  = " + Double.toString(-b) + " - " + Double.toString(inner) + "i");
      } else {
         inner = Math.sqrt(inner);
           System.out.println("X = " + Double.toString(-b));
         if (inner == 0){
         } else {
           System.out.println("X = " + Double.toString(-b + inner));
           System.out.println("X = " + Double.toString(-b - inner));
      }
    }
  }
}
package;
导入java.util.Scanner;
公共类表格{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入A的值”);
double a=input.nextDouble();
System.out.println(“输入B的值”);
double b=input.nextDouble();
System.out.println(“输入C的值”);
double c=input.nextDouble();
如果(a==0){
//0=0*x*x+b*x+c=>x=-c/b
System.out.println(“X=“+Double.toString(-c/b));
}否则{
双内=b*b-4*a*c;
如果(内部<0){
内部=-内部;
内部=Math.sqrt(内部);
System.out.println(“X=“+Double.toString(-b)+“+”+Double.toString(内部)+“i”)
System.out.println(“=”+Double.toString(-b)+“-”+Double.toString(内部)+“i”);
}否则{
内部=Math.sqrt(内部);
System.out.println(“X=“+Double.toString(-b));
如果(内部==0){
}否则{
System.out.println(“X=“+Double.toString(-b+inner));
System.out.println(“X=“+Double.toString(-b-内部));
}
}
}
}

这允许您的用户输入任何双数值并获得答案。

您的
a
b
c
的值是多少?是
b*b-4*a*c
负值?abc和用户输入的数字。这与二次方程中的变量相对应。不,它不是负值,只是求等式时的-b(b^2-4ac)/英语中的负b加上或减去平方根b平方减去4ac除以2 a你的
a
b
c
的值是什么?是
b*b-4*a*c
负?abc和用户输入的数字。这与二次方程中的变量相对应。不,它不是负的,只是-b方程。(-b[+或-]sqrt(b^2-4ac)/英语中的负b加或负平方根b平方负4ac加上2个字母来做这个把戏。至少目前,这个代码对我的大脑来说有点超前。它给我留下了一个未完成的答案,比如doubleofstring+数字i。有没有办法改变运算代码的var类型以允许虚数?哦,谢谢t你花了很多时间来帮我!真的很感激!我不知道任何标准的java方法来用复数进行数学运算。你可以创建自己的复数类。下面是一些人的尝试。不过,最后,你仍然会得到两个部分,一个实部和一个虚部。好的,等我有了答案,我会研究这个问题一些睡眠,但感谢链接和帮助我!很好的复杂解算器+1;(
Math.abs
在代码中是多余的)你说得对。我不知道为什么我认为我需要它。似乎是在耍花招。代码至少在目前对我的大脑来说有点超前。它会给我留下一个未完成的答案,比如doubleofstring+数字I。有没有办法改变运算代码的var类型以允许虚数?哦,谢谢你花了这么多时间