KC McLaughlin
KC McLaughlin

Reputation: 246

Java class variable that tracks number of objects instantiated

I have this class, Student, with the variable StudentID:

public class Student extends Person{
  int studentID = 0;
  int level;

  public Student(){

  }

  public Student(String fName, String lName, int gLevel){
    super(fName, lName);
    if(gLevel >= 0 && gLevel <= 12){
      level = gLevel;
    }
    studentID++;
  }
  public int getLevel(){
    return level;
  }
  public String toString(){
    String toReturn;
    toReturn = super.toString() + "\n   Grade Level: " + level + "\n   ID #: " + studentID;
    return toReturn;
  }
}

I want the variable StudentID to keep assign each Student created a new ID number. Each ID number should be one more than the last ID number created, and so equal to the total number of objects that have been created. Right now each object is assigned the ID number of 1.

Upvotes: 3

Views: 3962

Answers (3)

David SN
David SN

Reputation: 3519

You need a static variable to keep track of the number of students objects created.

public class Student extends Person{

    /* Number of students objects created */
    private static int studentCount = 0;   
    int studentID = 0;
    int level;

    public Student(String fName, String lName, int gLevel){
        super(fName, lName);
        if(gLevel >= 0 && gLevel <= 12){
            level = gLevel;
        }
        studentID = Student.getNextStudentId();
    }

    private static synchronized int getNextStudentId() {
        /* Increment the student count and return the value */
        return ++studentCount;
    }
}

Upvotes: 1

Jamie Reid
Jamie Reid

Reputation: 552

Make the studentID a static member

Static members are kept throughout each instance of the class no matter how many instances of the clas there are.

   public class Student extends Person{
      static int studentID = 0;
      int level;

      public Student(){

      }

      public Student(String fName, String lName, int gLevel){
        super(fName, lName);
        if(gLevel >= 0 && gLevel <= 12){
          level = gLevel;
        }
        studentID++;
      }
      public int getLevel(){
        return level;
      }
      public String toString(){
        String toReturn;
        toReturn = super.toString() + "\n   Grade Level: " + level + "\n   ID #: " + studentID;
        return toReturn;
      }
    }

Upvotes: 1

Eran
Eran

Reputation: 393771

Add a static counter and initialize studentID with it, incrementing it in the process :

public class Student extends Person{
  static counter = 1;
  int studentID = counter++;
  ...

Upvotes: 4

Related Questions