Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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,我试图找到这个程序的二次公式,我不确定我犯了什么错误,但它似乎对我不起作用。输入5、-8、3、3、2、-7的输出为NaN。请记住,我有另一个类来测试这些方法,如果需要,我可以发布 编辑代码: import java.util.Scanner; import static java.lang.System.*; import static java.lang.Math.*; public class Quadratic { private int a, b, c; privat

我试图找到这个程序的二次公式,我不确定我犯了什么错误,但它似乎对我不起作用。输入5、-8、3、3、2、-7的输出为NaN。请记住,我有另一个类来测试这些方法,如果需要,我可以发布

编辑代码:

import java.util.Scanner; 
import static java.lang.System.*;
import static java.lang.Math.*;

public class Quadratic
{
    private int a, b, c;
    private double rootOne;
    private double rootTwo;

    public Quadratic()
    {

    }

    public Quadratic(int quadA, int quadB, int quadC)
    {
        a = quadA;
        b = quadB;
        c = quadC;
    }

    public void setEquation(int quadA, int quadB, int quadC)
    {
        a = quadA;
        b = quadB;
        c = quadC;
    }

    public void calcRoots( )
    {
        rootOne = (-b + Math.sqrt(Math.pow(b,2)-4*a*c))/(2*a);
        rootTwo = (-b - Math.sqrt(Math.pow(b,2)-4*a*c))/(2*a);
    }

    public void print( )
    {
        System.out.println("");
        System.out.print("ROOTS :: "+ rootOne);
        System.out.println("\t" + rootTwo);
        System.out.println("");
        System.out.println("");
    }
}
测试等级:

import java.util.Scanner; 
import static java.lang.System.*;
import static java.lang.Math.*;

public class QuadraticRunner
{
    public static void main( String[] args )
   {
        Scanner keyboard = new Scanner(in);

        System.out.print("ENTER A :: ");
        int a = keyboard.nextInt();

        System.out.print("ENTER B :: ");
        int b = keyboard.nextInt();

        System.out.print("ENTER C :: ");
        int c = keyboard.nextInt();

        Quadratic test = new Quadratic();
        test.calcRoots();
        test.print();


        System.out.print("ENTER A :: ");
        a = keyboard.nextInt();

        System.out.print("ENTER B :: ");
        b = keyboard.nextInt();

        System.out.print("ENTER C :: ");
        c = keyboard.nextInt();

        test.calcRoots();
        test.print();


        System.out.print("ENTER A :: ");
        a = keyboard.nextInt();

        System.out.print("ENTER B :: ");
        b = keyboard.nextInt();

        System.out.print("ENTER C :: ");
        c = keyboard.nextInt();

        test.calcRoots();
        test.print();
   }
}

你缺少括号了

rootOne = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
此外,您没有处理任何特殊情况,如虚根、重复根等。

我不会使用setEquation方法和实例变量。我想那会给你带来不必要的麻烦

您可以这样做,而不必存储实例变量:

public double [] calcRoots(int a, int b, int c)
{
    double[] roots = new double[2];

    roots[0] = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
    roots[1] = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);

    return roots;
}

在你的测试中,你从来没有设置a,b和c。使用无参数二次构造函数:

Quadratic test = new Quadratic();
而且你不需要调用setEquation

a、b和c的默认值为0,这就是为什么您得到的是NaN而不是数字值:

( -0 + Math.sqrt( Math.pow( 0 , 2 ) - 4 * 0 * 0 ) ) / ( 2 * 0 )
    ==
( 0.0 ) / ( 0.0 ) // IEEE division of zero by zero results in NaN
使用int、int、int构造函数或setEquation


请向我们展示如何初始化和使用此类的方法。另外:float getVertexX{return-b/2f*a;};:我是为一个comp-sci课程做这件事的,我想他们只是想要最简单的二次公式。我还添加了你建议的编辑,但是仍然有NaN,也许b是负数?谢谢你的帮助@Certus我说你没有处理特殊情况。当a=0时,二次公式失败。二次型退化为bx+c=0,所以你求解x,x=-c/b。这是线性情况。千万不要在不理解数学的情况下编写软件。@Mr.polywhill当浮点除法的分母为零时,Java也会返回NaN或无穷大。看。一定要检查这些东西。你忘了:float x2=b*b-4*a*c,布尔值isReal=x2>=0,float sqrt=Math.sqrtisReal?x2:x2*-1,float root1=-b+sqrt/2*a,root2=-b-sqrt/2*a@Mr.Polywhirl接得好,我没想到。谢谢你的帮助,但就像我提到的@Gene,这是一门初级的Comp-Sci课程,所以我还没有学过,所以我的老师会知道这不是我的工作,我也还没学到那么远。D:有没有什么方法可以像我在代码中所展示的那样使用这个方法?@Certus我不知道该怎么说。我觉得有点悲哀;就像你在阻止自己学习一样。PS,它只是一个数组。我只是不想在我的代码中加入一些我不理解的东西。只要我能解释我做了什么,我相信如果我把它放进去就好了。我确实有一个问题:是什么错误导致我使用不同的代码?顺便说一下,谢谢你的链接。我将确保查看并了解更多信息:仅供参考:在IEEE标准中,仅当您除以0/0时,NaN中的除零结果;任何其他/0都将导致正或负无穷大。@ajb是的,您是正确的。他们得到的是0.0/0.0。@ajb NaN/0也是NaN。
Quadratic test = new Quadratic(a, b, c);
test.setEquation(a, b, c);