1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Java - trouble debugging

  1. Nov 21, 2011 #1
    1. The problem statement, all variables and given/known data

    We must make a class used to evaluate a polynomial function of x. My problem is I am getting an array out of bounds exception when I run the main, and I can't figure out why.
    If you could help me figure out this out of bounds exception it would be very appreciated thank you.

    2. Relevant equations

    ex. P(x)= a0 + a1x + a2x2...

    3. The attempt at a solution

    This is the class

    Code (Text):
    public class Polynomial
    {
        private int degree, i=0, size;
        private double answer;
        private double[] coefficient = new double[size];
       
        public Polynomial(int max)
        {
            if(degree>=0)
                degree = max;
            size=max+1;
                   
        }
       
        public void setConstant(int subscript, double value)
        {
            i = subscript;
            coefficient[i] = value;        
        }
       
        public double evaluate(int x)
        {
            for(int index=0;index<coefficient.length;index++)
            {
                answer = coefficient[index] * (Math.pow(x, degree));
            }
                return answer;        
        }
    }
     
    This is the main

    Code (Text):
    public class PolynomialDemo
    {

        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            Polynomial p = new Polynomial(3);
           
            p.setConstant(0, 3);
            p.setConstant(1, 5);
            p.setConstant(2, 0);
            p.setConstant(3, 2);
           
            System.out.println(p.evaluate(7));
        }
    }
     
    Last edited: Nov 21, 2011
  2. jcsd
  3. Nov 21, 2011 #2
    It is because the length of the array coefficient is zero!

    When you are creating the object of the class Polynomial, you are calling the constructor and it is updating the value of "size" but not the creating an array "coefficient" of length "size".


    It will be better if you define the length of the "coefficient" array inside the constructor.
    therefore the correct version should look like this:

    private double[] coefficient ;

    public Polynomial(int max)
    {
    if(degree>=0)
    degree = max;
    size=max+1;
    coefficient = new double[size];

    }
     
  4. Nov 21, 2011 #3

    Mark44

    Staff: Mentor

    The problem seems to be that your constructor does not initialize degree. Here's what I think is going wrong.
    In main:
    Code (Text):
    Polynomial p = new Polynomial(3);
    This causes the constructor to be called, with the max parameter set to 3.
    Code (Text):
    public Polynomial(int max)
    {
        if(degree>=0)
             degree = max;
        size=max+1;
    }
    Since degree is uninitialized, there's no telling whether degree>=0 will be true. I'm not sure what the purpose of the max variable is - it could possibly be eliminated altogether, and you could have the parameter of the constructor be degree.
     
  5. Nov 21, 2011 #4
    Thank you, and now, that example i used in the main should set a polynomial like
    P(x) = 3 + 5x + 2x^3 and when i evaluate for x=7 should result in 724, but i'm getting 686 which is just 2x^3. Can anyone see what I did wrong?
     
  6. Nov 21, 2011 #5
    Never mind it works properly now. Revised the code to this.
    Code (Text):
    public class Polynomial
    {
        private int degree, i=0, size;
        private double answer;
        private double[] coefficient = new double[size];
       
        public Polynomial(int max)
        {
            if(max>=0)
                degree = max;
            size=max+1;
            coefficient = new double[size];
        }
       
        public void setConstant(int subscript, double value)
        {
            i = subscript;
            coefficient[i] = value;        
        }
       
        public double evaluate(int x)
        {
            for(int index=degree;index>=0;index--)
            {
                answer += coefficient[index] * (Math.pow(x, degree));
                degree--;
            }
                return answer;        
        }
    }
     
  7. Nov 21, 2011 #6

    Mark44

    Staff: Mentor

    The parameter of your evaluate method should be double instead of int, so that you can evaluate the polynomial at values such as 2.5.
     
  8. Nov 22, 2011 #7
    Ok I will do that thank you.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Java - trouble debugging
Loading...