Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

stackoverflow error in java

Tags:

java

I'm a newbie in java. I'm writing a class where the constructor must check the price parameter and ensure it is not a negative number. And if it is negative, it must set the price to zero. I get a stackoverflow error when I check price. Can i get help with what I did wrong?

public class Book
{
    private String title;
    private String author;
    private String isbn;
    private int pages;
    private boolean pback;
    private double price;

    /**
     * Constructor for objects of class Book
     */
    public Book(String bookTitle, String bookAuthor, String bookCode, int bookPages, boolean paperback, double bookRetail)
    {
        title = bookTitle;
        author = bookAuthor;
        isbn = bookCode;
        pages = bookPages;
        pback = paperback;
        price = bookRetail;
    }

    /**
     * @returns title
     */

    public String gettitle()
    {
        return title;
    }

   /**
    * @returns author
    */

    public String getauthor()
    {
        return author;
    }

   /**
    * @returns ISBN#
    */

   public String getisbn()
    {
        return isbn; 
    }

   /**
    * @return number of pages
    */ 

   public int getpages()
    {
        return pages;
    }

   /**
    * @return is book paperback
    */ 

   public boolean getpback()
    {
        return pback;
    }

   /**
    * @return retail price
    */ 

   public double getprice() 
   {
       if(getprice() < 0)
       {
           return 0;
       } 
       else
       {
           return price;
       }

    }
}
like image 301
Tim Avatar asked Feb 06 '10 04:02

Tim


4 Answers

Your getprice() method calls itself instead of checking price. This is leading to an infinite recursion in this case.

like image 194
Ignacio Vazquez-Abrams Avatar answered Sep 28 '22 08:09

Ignacio Vazquez-Abrams


Ignacio has explained the cause, and the solution:

Change the line

if(getprice() < 0)

to this:

if(price < 0)
like image 27
mauris Avatar answered Sep 28 '22 06:09

mauris


Your getting infinite recursion, because your if condition checks your getprice() method, not your price variable.

Many modern compilers will warn you when you have coded something that results in infinite recursion.

I still sometimes come across this error too, especially with IDE's that have intellisense.

Good luck learning Java! :)

like image 36
Alex Avatar answered Sep 28 '22 08:09

Alex


When you write a bean you generally want to check if the price being set is < 0, instead of making this calculation every time you try to get the variable.

like image 29
sdavids Avatar answered Sep 28 '22 08:09

sdavids