Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 - Fatal编程技术网

Java 简单程序不能正常工作

Java 简单程序不能正常工作,java,Java,我想知道为什么这个代码不能正常工作 打印结果始终为:如果参数为负,则NaN返回NaN(非数字)。一旦你有了一个NaN,基本上任何其他的操作都会产生NaN 注意,并非所有的二次函数都有实根;如果希望得到非NaN的结果,则需要确保b2≥ 4ac 此外: 正如kingdamian42在上面的评论中指出的,您需要/(2*a)而不是/2*a。(后者的意思是“除以2,然后乘以a”。) 我认为写b*b比写Math.pow(b,2)更好。后者速度较慢,通常具有较大的舍入误差。(我主要考虑数学。POW < /代

我想知道为什么这个代码不能正常工作

打印结果始终为:如果参数为负,则NaN

返回NaN(非数字)。一旦你有了一个NaN,基本上任何其他的操作都会产生NaN

注意,并非所有的二次函数都有实根;如果希望得到非NaN的结果,则需要确保b2≥ 4ac

此外:

  • 正如kingdamian42在上面的评论中指出的,您需要
    /(2*a)
    而不是
    /2*a
    。(后者的意思是“除以2,然后乘以a”。)
  • 我认为写
    b*b
    比写
    Math.pow(b,2)
    更好。后者速度较慢,通常具有较大的舍入误差。(我主要考虑<代码>数学。POW < /代码>对于非平凡的幂是有用的。)
Math.sqrt(Math.pow(b,2)-4*a*c)

这是将返回NaN的部分。如果插入(1,0,1)的值,即x^2+1,将得到NaN,因为它从未穿过x线

换句话说,如果Math.pow(b,2)-4*a*c)<0,您应该期望NaN

如果你想做二次公式,那么合适的方程是:

import java.util.Scanner;

public class Welcome
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        double a = input.nextDouble();
        double b = input.nextDouble();
        double c = input.nextDouble();

        double rezultat = - b + Math.sqrt(Math.pow(b, 2) - 4 * a * c) / 2 * a;

        System.out.println(rezultat);
    }
}
您需要考虑操作顺序,在Java中更是如此。您最初的操作将返回一些不是x的内容

此外,对于+/-二次型,还有两个预期结果

double rezultat = (-b + Math.sqrt(Math.pow(b, 2) - 4 * a * c)) / (2 * a);
粗略的程序输出应为:

double rezultat2 = (-b - Math.sqrt(Math.pow(b, 2) - 4 * a * c)) / (2 * a);
double bsqm4ac=(Math.pow(b,2)-4*a*c);
如果(bsqm4ac<0.0){//x轴没有交点,即x^2+2
System.out.println(“未找到值”);
}else如果(bsqm4ac==0.0){//x轴的一个交点,即x^2
System.out.println(-b/(2*a)+0.0);//如果
//b=0,因为是双倍的
}else{//x轴的两个交点,即x^2-1
System.out.println(-b-bsqm4ac)/(2*a)+,“+(-b+bsqm4ac)
/(2*a));
}

请注意:
{expression}/2
2*a
之前被调用,但不知道您的输入是什么,这个问题无法回答。如果输入中有字符串“nan”,那么输出显然是nan。发生这种情况时,
a
b
c
的值是多少?在调试时,该计算中的哪些操作没有达到预期效果?概率是
Math.sqrt()
接受的是负数。来自api:“如果参数为NaN或小于零,则结果为NaN。”
    double bsqm4ac = (Math.pow(b, 2) - 4 * a * c);
    if (bsqm4ac < 0.0) {// no intersections of x axis i.e. x^2+2
        System.out.println("No value found");
    } else if (bsqm4ac == 0.0) { //one intersection of x axis i.e. x^2
        System.out.println(-b / (2 * a) + 0.0); // we can get a -0.0 here if
                                                // b = 0, because doubles
    } else { //two intersections of x axis ie. x^2 - 1
        System.out.println((-b - bsqm4ac) / (2 * a) + "," + (-b + bsqm4ac)
                / (2 * a));
    }