从另一个类调用方法,得到错误

时间:2013-03-15 20:29:48

标签: java java-ee bluej

我从另一个类调用方法时遇到错误。我在课堂 StockManager ,我想在课程产品中调用 toString 方法。

但是我收到了错误:类中的Constructor Product Product不能应用于给定的类型:required:int.java.lang.String;发现:没有争论;原因:实际和格式参数列表的长度不同

BTW我正在使用BlueJ。

请注意下面的printProductDetails()方法。这就是我想写的。

以下是我在StockManager课程中获得的所有内容。我正在尝试在下面的printProductDetails()方法中打印出Product类中toString的详细信息:

import java.util.ArrayList;

/**
 * Manage the stock in a business.
* The stock is described by zero or more Products.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class StockManager
{
// A list of the products.
private ArrayList<Product> stock;

/**
 * Initialise the stock manager.
 */
public StockManager()
{
    stock = new ArrayList<Product>();
}

/**
 * Add a product to the list.
 * @param item The item to be added.
 */
public void addProduct(Product item)
{
    stock.add(item);
}

/**
 * Receive a delivery of a particular product.
 * Increase the quantity of the product by the given amount.
 * @param id The ID of the product.
 * @param amount The amount to increase the quantity by.
 */
public void delivery(int id, int amount)
{

}

/**
 * Try to find a product in the stock with the given id.
 * @return The identified product, or null if there is none
 *         with a matching ID.
 */
public Product findProduct(int id)
{
    return null;
}

/**
 * Locate a product with the given ID, and return how
 * many of this item are in stock. If the ID does not
 * match any product, return zero.
 * @param id The ID of the product.
 * @return The quantity of the given product in stock.
 */
public int numberInStock(int id)
{
    return 0;
}

/**
 * Print details of all the products.
 */
public void printProductDetails()
{
    Product string = new Product();
    string.toString(); {
                    System.out.println("Attempt to restock " +
                           name +
                           " with a non-positive amount: " +
                           amount);
                        }

}
}

如何解决这个问题的具体帮助以及建议的一些原因将不胜感激谢谢。

产品类别:

/**
 * Model some details of a product sold by a company.
 * 
 * @author David J. Barnes and Michael Kölling.
 * @version 2011.07.31
 */
public class Product
{
// An identifying number for this product.
private int id;
// The name of this product.
private String name;
// The quantity of this product in stock.
private int quantity;

/**
 * Constructor for objects of class Product.
 * The initial stock quantity is zero.
 * @param id The product's identifying number.
 * @param name The product's name.
 */
public Product(int id, String name)
{
    this.id = id;
    this.name = name;
    quantity = 0;
}

/**
 * @return The product's id.
 */
public int getID()
{
    return id;
}

/**
 * @return The product's name.
 */
public String getName()
{
    return name;
}

/**
 * @return The quantity in stock.
 */
public int getQuantity()
{
    return quantity;
}

/**
 * @return The id, name and quantity in stock.
 */
public String toString()
{
    return id + ": " +
           name +
           " stock level: " + quantity;
}

/**
 * Restock with the given amount of this product.
 * The current quantity is incremented by the given amount.
 * @param amount The number of new items added to the stock.
 *               This must be greater than zero.
 */
public void increaseQuantity(int amount)
{
    if(amount > 0) {
        quantity += amount;
    }
    else {
        System.out.println("Attempt to restock " +
                           name +
                           " with a non-positive amount: " +
                           amount);
    }
}

/**
 * Sell one of these products.
 * An error is reported if there appears to be no stock.
 */
public void sellOne()
{
    if(quantity > 0) {
        quantity--;
    }
    else {
        System.out.println(
            "Attempt to sell an out of stock item: " + name);
    }
}
}

3 个答案:

答案 0 :(得分:1)

您需要在Product类中定义默认构造函数(不带参数),或者在获取Product实例时传递int id,String name:

// ...
Product string = new Product(1, "test value");
string.toString();
// ...

答案 1 :(得分:1)

printProductDetails方法不应该打印stock中的所有产品吗?这就是文档所说的:

  
      
  • 打印所有产品的详细信息。
  •   

所以我的猜测是你需要实际迭代你的stock而不是试图构建Product

public void printProductDetails() {
    for (Product product:stock) {
        System.out.println(product);
    }
}

答案 2 :(得分:0)

从你的问题来看,这就是我的想法。

您需要覆盖toString()中的Product class。在Product class

中添加此方法
public String toString()
{
     String str = "\n******Product ******\n"+
                   "Name :"+this.name+
                   "\nType :"+this.type;
    return str;
}

您可以使用System.out.println(product)打印您的产品,其中productProduct class的实例