Class is not abstract and does not override abstract method error

Steven :

I've been working on a program that can find the root of a polynomial for school, and do various other polynomial related stuff like adding them together or finding the value of a polynomial with a given x. While the other two classes I made work fine (they find the root of a sin and cos function), my FuncPoly class seems to be conflicting with my evaluate method somehow, and doesn't want to inherit it. This is my exact error message:

.\FuncPoly.java:1: error: FuncPoly is not abstract and does not override abstract method evaluate(double) in Function public class FuncPoly extends Function{

I've tried fiddling with the evaluate method a little bit and trying to add some overrides in, but it hasn't been helping me very much. I need help finding what is causing this error; maybe its related to my constructor?. Thanks for reading and your help! Code is below; there is a lot in there, but I don't think most of it is pertinent to the question.


    public abstract double evaluate(double x); //Basically just a filler for SinFunc and CosFunc

    public double findRoot(double a, double b, double epsilon){

        double x = ( a + b ) / 2;

        if (Math.abs( a - x) <= epsilon){

            return x;

        }else if (evaluate(x)*evaluate(a) >= 0){

            return findRoot(x, b, epsilon);

        }else{

            return findRoot(a, x, epsilon);
        }
    }

    public static void main(String[] args){
        //Tests SinFunc and CosFunc
        SinFunc q = new SinFunc();
        CosFunc w = new CosFunc();
        System.out.println("The root of sin(x) with the numbers entered with the given epsilon is: " + q.findRoot(3,4,.00000001));
        System.out.println("The root of cos(x) with the numbers entered with the given epsilon is: " + w.findRoot(1,3,.00000001));

        //Tests the FuncPoly stuff
        int[] test1 = {1,0,-3};
        int[] test2 = {1,-1,-2};
        FuncPoly poly1 = new FuncPoly(test1);
        FuncPoly poly2 = new FuncPoly(test2);
        System.out.println("The root of x^2 + (-3) is" + poly1.findRoot(0,10,.00000001));

    }
}

____________________________

public class FuncPoly extends Function{

    public int coefficients[];

    public FuncPoly(int[] coefficients){
        //Constructor
        this.coefficients = coefficients;
    }

    public int degree(){
        //Finds the highest power by finding the location of the last number in the array.
        return this.coefficients.length - 1;

    }

    public String toString(){
        //Converts a polynomial to a string
        StringBuilder poly = new StringBuilder();
        for(int i = degree(); i >= 0; i--){
            if (i == degree()){
                poly.append(this.coefficients[i] + "x^" + degree());
            }else{
                if (this.coefficients[i] == 0){
                    System.out.println(i);
                }else if (i == 0){
                    poly.append(" + " + this.coefficients[0]);
                } else if ( i == 1){
                    poly.append(" + " + this.coefficients[1] + "x");
                } else{
                    poly.append(" + " + this.coefficients[i] + "x^" + i);
                }
            }
        }

        return poly.toString();
    }

    public FuncPoly add(FuncPoly a){
        //Adds the selected polynomial and the last called polynomial together and returns the array.
        if (this.degree() > a.degree()){
            int[] polyAdd = new int[this.degree() + 1];
            for (int i = 0; i <= a.degree(); i++){
                polyAdd[i] = a.coefficients[i] + this.coefficients[i];
            }
            for (int i = a.degree() + 1; i < this.degree() + 1; i++){
                polyAdd[i] = this.coefficients[i];
            }
            FuncPoly polyResult = new FuncPoly(polyAdd);
            return polyResult;
        } else if (this.degree() < a.degree()){
            int[] polyAdd = new int[a.degree() + 1];
            for (int i = 0; i <= this.degree(); i++){
                polyAdd[i] = a.coefficients[i] + this.coefficients[i];
            }
            for (int i = this.degree() + 1; i < degree() + 1; i++){
                polyAdd[i] = a.coefficients[i];
            }
            FuncPoly polyResult = new FuncPoly(polyAdd);
            return polyResult;
        } else {
            int[] polyAdd = new int[a.degree() + 1];
            for (int i = 0; i < a.degree() + 1; i++){
                polyAdd[i] = a.coefficients[i] + this.coefficients[i];
            }
            FuncPoly polyResult = new FuncPoly(polyAdd);
            return polyResult;
        }
    }

    public double value(double x){
        //Finds the value of polynomial with a given x.
        double sum = 0;
        for(int i = 0; i < this.degree() + 1; i++){
            sum += this.coefficients[i] * Math.pow(x,i);
        }
        return sum;
    }

}
Robby Cornelissen :

As far as I can tell, your value() method in FuncPoly needs to be renamed to evaluate() to successfully implement the abstract evaluate() method from the Function class.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325957&siteId=1