gpt4 book ai didi

java - 类中的流水号

转载 作者:行者123 更新时间:2023-12-03 23:13:38 24 4
gpt4 key购买 nike

在下面的示例中,我试图为类::Product 生成一个作为简单 ID 的运行。然而,结果并不是我所期望的。

我的代码

public class myProgram
{
public static void main(String[] args)
{
Product product1 = new Product("AAA");
Product product2 = new Product("BBB");
Product product3 = new Product("CCC");

System.out.println(product1.printItem());
System.out.println(product2.printItem());
System.out.println(product3.printItem());
}
}

class Product
{
static int productID = 0;
String name;

public Product(String startName)
{
productID ++;
name = startName;
}

public int printItem()
{
return productID;
}
}

计划成果

3
3
3

我期望得到的结果是:

1
2
3

我的问题:我做错了什么导致程序输出错误?

编辑 1: 我放置了一个静态关键字,希望它在每次创建实例后增加 ProductID(而不是每次都重置回 0)。如果没有,如何生成流水号?

最佳答案

因为 productId 是静态的,所以您的每个实例一次只有一个全局值,为了匹配您的预期输出,您需要每个实例都有一个本地 id。另外,我建议您将 printItem() 替换为 toString() 和/或 getItem()。最后,为了线程安全,你应该使用 AtomicInteger ,

class Product {
static AtomicInteger productCount = new AtomicInteger(0);
int productID = 0;
String name;

public Product(String startName) {
productID = productCount.addAndGet(1);
name = startName;
}

public int getItemId() {
return productId;
}

@Override
public String toString(){
return String.valueOf(productID);
}
}

关于java - 类中的流水号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com