在Java中创建增量编号序列

时间:2013-12-04 19:25:41

标签: java

所以我正在为学校项目创建学生数据库。我的第一个问题是,在创建一个新学生时,我应该看到“申请号###已成功注册”。现在的问题是,每次记录一个新的应用程序时,我们必须从1顺序生成(###引用数字)。我该怎么做呢?

到目前为止,这是有什么,但我似乎无法获得增量生成的数字。

public TestApplication(String Surname, String personalIdNo)
{
    if (isValidpersonalIdNo(personalIdNo) == true)
    {
        Student.add(Surname);
        Application.put(personalIdNo, Student);
        System.out.println("Application number ### " +  "has registered successfully");
    }
    else
    {
        System.out.println("Application has failed, Personal id: " + personalIdNo);
    }
}

任何有关这方面的帮助都会被贬低。

3 个答案:

答案 0 :(得分:1)

由于您似乎使用了大量静态方法,我相信在这种情况下您最好的做法是创建一个名为 latestId 的静态字段和一个名为 generateId的静态方法,都在Student课程中。然后,只要您调用 Student.add ,就可以调用 generateId 方法。

但是,请注意,如果您的应用程序是多线程的,则此解决方案不起作用。

public class Student {

private static int latestId = 0;

public static int generateId() {
   return ++latestId;
}

...
}

答案 1 :(得分:0)

您可以编写一个能为您生成ID的单例类:

class Generator {

  private AtomicInteger count = new AtomicInteger(1);
  private static Generator generator = new Generator();

  private Generator() { }
  public static Generator getInstance() {
    return generator;
  }

  public int generate() {
    return count.getAndIncrement();
  }

}

现在,当您需要获取新ID时,只需调用generate方法即可。使用AtomicInteger是因为您可能需要来自多个线程的id,并且它将使并发访问安全。

单例Generator为id生成工具提供了一个入口点。

答案 2 :(得分:0)

您可以使用存储类型为您提供已添加到数据库中的学生数量。 我不知道你用什么类型来存储你的学生。如果是hashmap或vector,您可以使用size方法打印学生计数。所以我假设如果你有Application.put,你可能在你的应用程序类型中有一个用于存储每个学生的字段。然后你可以添加像getStudentsCount这样的方法,你应该全部设置。由于我对您的应用类型了解不多,以上都是假设。您可以在下面找到解决方法:

import java.util.HashMap;
import java.util.Vector;

class Student{
    private String name;
    private int personalID;
    public Student(String name, int personalID){
        this.name = name;
        this.personalID = personalID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPersonalID() {
        return personalID;
    }
    public void setPersonalID(int personalID) {
        this.personalID = personalID;
    }


}
class DB{
    private HashMap<Integer, Student> students = new HashMap<Integer, Student>();

    public boolean addStudent(Student student) {
        Integer studentId = new Integer(student.getPersonalID());
        if( !students.containsKey(studentId)){
            students.put(new Integer(studentId), student);
            return true;
        }
        else
            return false;


    }

    public int getStudentCount() {
        return students.size();
    }
}

class Operations{
    DB db;
    public Operations(DB db){
        this.db = db;
    }
    public boolean addStudent(String name, int personalID){
        Student student = new Student(name, personalID);
        return db.addStudent( student );
    }
}
public class SimpleStudentDB {

    public static void main(String [] args){
        DB db = new DB();
        Operations operations = new Operations(db);
        if( operations.addStudent( "Jason", db.getStudentCount()+1) )
            System.out.println("Student added successfully. DB contains ###"+db.getStudentCount()+" elements");
        else
            System.out.println("Operation failed");
    }
}