RobTTay
RobTTay

Reputation: 11

"Constructor cannot be applied to given types" error

I keep getting the errors:

3 errors found:
File: C:\Users\TUFRob\Documents\Computer Science II\Retail\RetailItemDemo.java  [line: 6]
Error: constructor RetailItem in class RetailItem cannot be applied to given types;
  required: int,double,java.lang.String
  found: no arguments
  reason: actual and formal argument lists differ in length
File: C:\Users\TUFRob\Documents\Computer Science II\Retail\RetailItemDemo.java  [line: 7]
Error: constructor RetailItem in class RetailItem cannot be applied to given types;
  required: int,double,java.lang.String
  found: java.lang.String,int,double
  reason: actual argument java.lang.String cannot be converted to int by method invocation conversion
File: C:\Users\TUFRob\Documents\Computer Science II\Retail\RetailItemDemo.java  [line: 8]
Error: constructor RetailItem in class RetailItem cannot be applied to given types;
  required: int,double,java.lang.String
  found: no arguments
  reason: actual and formal argument lists differ in length

When I try to run my java program:

public class RetailItemDemo
{
    public static void main(String[]args)
    {
        RetailItem item1 = new RetailItem();
        RetailItem item2 = new RetailItem("Designer Jeans", 40, 34.95);
        RetailItem item3 = new RetailItem();
    }
}

with this class:

public class RetailItem
{
    private String description;
    private int unitsOnHand;
    private double price;

    public RetailItem(int unitsOnHand, double price, String description)
    {
        this.unitsOnHand = unitsOnHand;
        this.price = price;
        this.description = description;
    }
}

I'm having trouble seeing what might be causing the error

Upvotes: 0

Views: 6420

Answers (2)

Antony Dao
Antony Dao

Reputation: 425

Your RetailItem has only one Constructor:

public RetailItem(int unitsOnHand, double price, String description){...}

Then, all of your call are wrong:

//Problem 1:  wrong because you have no constructor with no param
RetailItem item1 = new RetailItem();
RetailItem item3 = new RetailItem();

And

// Problem 2:
RetailItem item2 = new RetailItem("Designer Jeans", 40, 34.95);
//wrong because your Constructor is RetailItem(int, double, String)
// not RetailItem(String, int, double)

How to fix:

Add default Constrcutor (no param) in you class to solve Problem 1

public RetailItem(){
}

To solve Problem 2, Change line 11 to:

RetailItem item2 = new RetailItem( 40, 34.95,"Designer Jeans");

Upvotes: 0

bNd
bNd

Reputation: 7630

Constructor of RetailItem has input parameter like int, double and string. You should pass parameter value in order as per definition of it. otherwise it will give compile time error. here you did same mistake.

Problem 1:

RetailItem item2 = new RetailItem(40, 34.95, "Designer Jeans");

instead of

RetailItem item2 = new RetailItem("Designer Jeans", 40, 34.95);

Problem 2:

RetailItem item3 = new RetailItem();

This syntax will try to call default constructor. In RetailItem class, you did not define default constructor as it will also give compile time error. Default constructor exist default only when no other constructor defined, otherwise you have to manually define it.

Refer: what is constructor in java?

Upvotes: 1

Related Questions