将值传递给参数

时间:2017-05-02 04:52:05

标签: java

当我试图这样做时我得到问题说

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

我有两节课:

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");
    }
}

我知道我必须为Product构造函数声明。但我想我已经做到了。如果有人知道我哪里出错了,请解释一下。谢谢!

6 个答案:

答案 0 :(得分:3)

你没有带有一个param的构造函数,所以你不能使用这个表单

product = new Product("Sticky tape");

使用一个参数重新构造一个构造函数或填充所有参数

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

答案 1 :(得分:3)

你需要:

重载构造函数

public Product(String name){...}

或使用正确的只有一个构造函数创建Product的实例:

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

如果你超载那么会发生这样的事情

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

所以你从另一个构造函数中调用一个构造函数

答案 2 :(得分:3)

这是学习构造函数重载的时候了。重载来自OOP。

您可以使用重载到方法和构造函数。重载意味着可以实现该方法的相同方法名称

  • 使用不同参数(参数数量)的几次

。不仅如此,

  • 您可以为参数使用不同的数据类型。
  • 也可以改变参数的顺序。
  

请记住方法名称必须相同。

对于构造函数也是一样的。如果您使用构造函数,则可以添加如下参数:

//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;
    }

就像你可以添加任意多个。

或者您可以使用一个构造函数并在创建对象时传递参数以匹配构造函数的实现。如下所示:

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

这不是完整的说明,您可以阅读this了解更多信息

答案 3 :(得分:1)

错误在这些代码行中:

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

定义的Product构造函数需要:

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

答案 4 :(得分:1)

在Product类中没有构造函数,它接受单个String参数。像这样创建它:

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

在import语句中,您忘记了分号:

import java.text.*;

答案 5 :(得分:1)

您的程序有3个编码错误,其中包括

  1. 你在“import java.text。*”之后忘记了“;”实际上你的代码中不需要它,你可以删除它,什么都不会改变。
  2. 你不能将类Product作为公共类,因为你已经将“Store”作为具有main方法的主类。所以从Product类中删除public关键字。
  3. 您没有创建参数化构造函数 这应该是

    公共产品(字符串名称){this.name = name;}

    在您的产品类中。

  4. 你的代码就像纠正后的

    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");
        }
    
    
     }