-1

这是我的学校作业。我需要一个库存系统,当用户输入新产品时,它会自动更新产品 ID。我创建了一个名为 Product 的对象数组,它具有 4 个属性(名称、ID、价格、数量)。ID 不需要用户输入。

这部分在 input() 方法中,它与 Object 位于不同的类中。我没有将 ID 传递给对象类,就像我对其他三个属性所做的那样。

            x[i] = new Product(name,price,stock);
            id = x[i].setID();   

对象类的一部分:

/**
 * Constructor
 */
public Product(){
    id = 0; name = ""; price = 0.00; quantity = 0;
}

public Product( String n, double p, int q){
    setName(n); setPrice(p); setQuantity(q);
}

public void setID(){
    this.id = id++;
}

谢谢你。

4

2 回答 2

1

您所拥有的将不起作用,因为id它是一个实例变量。这意味着您创建的每个产品的 ID 都是 0。调用setID()您创建的每个产品都会将每个产品的 ID 设置为 1。

您需要一个static计数器,它属于该类,而不是它的每个实例:

public class Product {
    private static int nextId = 0;

    ...

    public Product(String name, double price, int quantity) {
        this.id = Product.nextId;
        Product.nextId++;
        this.name = name; 
        this.price = price; 
        this.quantity = quantity;
    }
}

请注意,这在多线程环境中效果不佳,并且 double 对价格来说是一个糟糕的选择,但稍后您会了解到这一点。

有关实例和静态变量的更多信息,请参阅Java 教程

于 2013-03-17T10:36:50.850 回答
0

您是否正在寻找一种为每个 Product 对象生成唯一 ID 的方法?如果是这样,那么您现在编写它的方式就行不通了,因为每个 Product 都有自己的 id,它完全独立于所有其他 Product 对象。有几种方法可以解决这个问题:-

  1. 查看静态变量在 Java 中的含义
  2. 在代码中维护一个变量,每次创建 Product 对象时该变量都会递增。将此变量传递给 Product 的构造函数。
于 2013-03-17T10:32:43.960 回答