Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为类的每个实例分配唯一的序列号?_Java - Fatal编程技术网

Java 如何为类的每个实例分配唯一的序列号?

Java 如何为类的每个实例分配唯一的序列号?,java,Java,我有两门课: 当我想得到(杰克,1)和(约翰,2)等等的时候,它会打印(杰克,2)和(约翰,2) 谁能告诉我怎么改变这个吗 谢谢 public class Worker{ String name; int number; private static int totalCount=0; public Worker(String N){ name=N; totalCount++; number = totalCount; }

我有两门课:




当我想得到(杰克,1)和(约翰,2)等等的时候,它会打印(杰克,2)和(约翰,2)

谁能告诉我怎么改变这个吗

谢谢

public class Worker{

  String name;
  int number;

  private static int totalCount=0;


  public Worker(String N){

     name=N;
     totalCount++;
     number = totalCount;
  }

  public String numberOfTime(){
      return name +", "+ number; 
  }
}
试试这个


您没有为实例分配一个编号,它们的总计数应该与分配给每个实例的编号分开

如果要为每个工作者设置一个ID,您应该这样做:

public class Worker{

  String name;

  private static int count=0;

  private int id = ++count;

  public Worker(String N){
     name=N;
  }

  public String numberOfTime(){
      return name +", "+ id; 
  }
}

对我来说,最好的方法是引入一个IdGenerator作为额外的类

public class IdGenerator {

    private static int id =1;

    public static int newId(){
        return id++;
    }
}
并将您的
Worker
类更改为:

public class Worker{

  String name;

  private  int id=0;

  public Worker(String n){

     name=n;
     id = IdGenerator.newId();
  }

  public String numberOfTime(){
      return name +", "+ id; 
  }
}

OO设计比将计数器集成到对象本身更好。

静态变量属于类对象,而不是实例。为什么是“约翰2”?“约翰”只叫一次,我想给每个工人一个号码。第一个工人是1号,而最后一个工人是n号。然而,这里它给了我方法被调用的次数(总是我)。@lezaza这不算!我认为你需要改变这个问题的标题,因为它完全是误导性的@MostafaEl Messiry不要具体询问您的答案是否被接受,但请记住OP标记最合适的答案;)@阿克塞尔呵呵。
public class IdGenerator {

    private static int id =1;

    public static int newId(){
        return id++;
    }
}
public class Worker{

  String name;

  private  int id=0;

  public Worker(String n){

     name=n;
     id = IdGenerator.newId();
  }

  public String numberOfTime(){
      return name +", "+ id; 
  }
}