Search code examples
javaobjectif-statementmethodsstack-overflow

(java.lang.StackOverflowError) how do i solve it?


i'm writing a program based on the Quadratic Equation everything looks good to me and there are not syntax or logical errors from what i see and also Eclipse isn't detecting any errors before running. this is the output from the code: Exception in thread "main" java.lang.StackOverflowError at QuadraticEquation.getDiscriminant(QuadraticEquation.java:33) note it continues like this for about 50 lines or so

public class QuadraticEquation {
    private double a;
    private double b;
    private double c;
    public QuadraticEquation() {  
    double a = 0;
    double b = 0;
    double c = 0;
    }

    public QuadraticEquation(double newA, double newB, double newC) {
        a = newA;
        b = newB;
        c = newC;
    }

    public double discriminant1 = Math.pow(b, 2) - 4 * a * c;
    public double discriminant2 = Math.pow(b, 2) - 4 * a * c;

    public double getA() {
    return getA();
    }
    public double getB() {
    return getB();
    }   
    public double getC() {
    return getC();
    }

    public double getDiscriminant() {
    double discriminant = (b * 2) - (4 * a * c);
        return getDiscriminant();
    }

    public double getRoot1() {
        double r1 = (-1*b) + Math.sqrt(discriminant1) / (2*a);
        return getRoot1();

    }
    public double getRoot2() {
        double r2 = (-1*b) - Math.sqrt(discriminant2) / (2*a);
        return getRoot2();
    }   

    public void setA(double newA1) {
        a = newA1;
    }
    public void setB(double newB1) {
        b = newB1;
    }
    public void setC(double newC1) {
        c = newC1;
    }
}
import java.util.Scanner;

public class TestEquation {

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



        System.out.println("Please enter the values of the following variables: ");

        System.out.println("a: ");
        Quadratic.setA(input.nextDouble());

        System.out.println("b: ");
        Quadratic.setB(input.nextDouble());

        System.out.println("c: ");
        Quadratic.setC(input.nextDouble());

        if (Quadratic.getDiscriminant() < 0) {

            System.out.println("The equation has the following roots:");

            System.out.println("The first one is " + Quadratic.getRoot1());

            System.out.println("The second one is " + Quadratic.getRoot2());


        }
        else if (Quadratic.getDiscriminant() == 0) { 
            System.out.println("The equation has one root:");

            System.out.println(Quadratic.getRoot1());

        }

        else {

        System.out.println("The equation has the no real roots");

        return;

        }
    }

}

Solution

  • Your error is an infinite recursion here:

    public double getDiscriminant() {
        double discriminant = (b * 2) - (4 * a * c);
        return getDiscriminant();
    }
    

    This function calls itself infinitely until the stack overflows. I believe you wanted to return the variable discriminant instead?

    Same for your functions getRoot1, getRoot2, getA, getB, and getC.