COI
COI

Reputation: 25

Pass values to parameters

when i trying to do this i got the problem said

Constructor Product in class Product cannot be applied to given types;
required: java.lang.String,int,double; found: java.lang.String;
reason: actual and formal arguments lists differ in length

And i have 2 classes:

import java.text.*
public class Product {
    private String name;
    private int stock;
    private double price;

    public Product(String name, int stock, double price) {
        this.name = name;
        this.stock = stock;
        this.price = price;
    }
public double sell(int n) {
        stock = n;
        return stock; 
    }
public void restock(int n) {
    }
@Override
    public String toString() {
        return stock + name + "at $"+price;
    }
}

public class Store {
   public static void main(String[] args) {
       new Store().use();
    }
    private Product product;
    private Product cashRegister;

    public Store() {
        product = new Product("Sticky tape");
        cashRegister = new Product("Cash register");
    }


    public void use() {
    }

    private void sell() {
    }

    private void restock() {
    }

    private void viewStock() {
    }

    private void viewCash() {
    }

    private void help() {
        System.out.println("Menu options");
        System.out.println("s = sell");
        System.out.println("r = restock");
        System.out.println("v = view stock");
        System.out.println("c = view cash");
        System.out.println("x = exit");
    }
}

I understand that i have to declare for Product constructor. But i think i have done it. If anyone know where i got wrong please explain. Thank you!

Upvotes: 2

Views: 433

Answers (6)

Blasanka
Blasanka

Reputation: 22477

This is the time to learn constructor overloading. Overloading comes from OOP.

You can use Overloading to methods and constructors. Overloading means for a same method name you can implement that method

  • several time with different parameters(number of parameters)

. Actualy not only that,

  • you can use different data types for parameter.
  • also can change order of parameter.

keep remember method name must be same.

For the constructor also same thing. If you use for constructor you can add parameters like:

//constructor with one parameter
    public Product(String name) {
          this.name = name;
          this.stock = 0;//or whatever your default value
          this.price = 0;//or whatever your default value
    }

//constructor with two parameter
    public Product(String name, , int stock) {
            this.name = name;
            this.stock = stock;
            this.price = 0;//or whatever your default value
    }

    public Product(String name, int stock, double price) {
            this.name = name;
            this.stock = stock;
            this.price = price;
    }

Like that you can add as many as you want.

Or you can use one constructor and pass argument to match with the implementation of the constructor when creating object. Like below:

product = new Product("Sticky tape", 0, 0);

this is not complete description you can read this to learn more

Upvotes: 3

Sripriya V
Sripriya V

Reputation: 295

The errors are in these lines of code:

   product = new Product("Sticky tape");
   cashRegister = new Product("Cash register");

The Product constructor defined expects:

public Product(String name, int stock, double price)

Upvotes: 1

Vivek
Vivek

Reputation: 11

your program is having 3 coding error which include

  1. you forgot the " ; " after " import java.text.* " actually it is not required in your code, you can remove it, nothing will change.
  2. you cannot make class Product as public , because you've made "Store" as your Primary class having main method.So remove public keyword from the Product class.
  3. You didn't create a parameterized constructor which should be like

    public Product(String name){ this.name = name;}

    in your product class.

your code will be like after correcting

class Product {
    private String name;
    private int stock;
    private double price;

    public Product(String name, int stock, double price) {
        this.name = name;
        this.stock = stock;
        this.price = price;
    }
public Product(String name) {
        this.name = name;
    }
public double sell(int n) {
        stock = n;
        return stock; 
    }
public void restock(int n) {
    }
@Override
    public String toString() {
        return stock + name + "at $"+price;
    }
}

public class Store {
   public static void main(String[] args) {
       Store s = new Store();
       System.out.println(s.product);
       System.out.println(s.cashRegister);

    }
    private Product product;
    private Product cashRegister;

    public Store() {
        product = new Product("Sticky tape");
        cashRegister = new Product("Cash register");
    }


 }

Upvotes: 1

Jay Smith
Jay Smith

Reputation: 2490

You have no constructor In Product class that takes single String argument. Create it like so:

public Product(String name) {
        this.name = name;
    }

In import statement you forgot semicolon:

import java.text.*;

Upvotes: 1

You need to:

overload the constructor

public Product(String name){...}

or create instances of Product using the right and only one constructor uor have:

 public Product(String name, int stock, double price)

if you overload then something like this should happen

public Product(String name){
    this(name, 0, 0.0);
}

so you call a constructor from the other constructor

Upvotes: 3

Tiep Phan
Tiep Phan

Reputation: 12596

you do not have constructor with one param, so you can not using this form

product = new Product("Sticky tape");

decare one more constructor with one param or fill all param

product = new Product("Sticky tape", 10, 20.0);

Upvotes: 3

Related Questions