1

I have two classes:


public class Worker{

  String name;

  private static int count=0;

  public Worker(String N){

     name=N;
     count++;
  }

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

public class counting{

   public static void main(String[]args){
       Worker worker1 = new Worker("Jack");

       Worker worker2 = new Worker("John");

       System.out.println(worker1.numberOfTime());

       System.out.println(worker2.numberOfTime());
   }
}

While I want to get (Jack, 1) and (John, 2) and so on, it prints (Jack, 2) and (John, 2).

Can anyone explain me how to change this?

Thanks.

Jens
  • 67,715
  • 15
  • 98
  • 113
le zaza
  • 21
  • 4

3 Answers3

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

Try this

You are not assigning a number to the instances, Their total count should be separate from the number assigned to every instance

0

If you want to set an ID to each Worker, you should so something like this:

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; 
  }
}
Michel_T.
  • 2,741
  • 5
  • 21
  • 31
0

Best way for me is to introduce an IdGenerator as an extra class.

public class IdGenerator {

    private static int id =1;

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

and Change your Worker class to:

public class Worker{

  String name;

  private  int id=0;

  public Worker(String n){

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

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

It is better OO design than integrating the Counter in the object itself.

Jens
  • 67,715
  • 15
  • 98
  • 113