0

問題は、一意の学生番号を作成できないことです。学生を保存するときに同じ学生 ID を取得することがあります。一意の学生 ID 番号を生成する方法はありますか。ストア メソッドを修正して、一意の学生番号を作成する必要があります。

public class Collection

{

   private ArrayList<Student> studentList;


    public Collection()
    {
        studentList = new ArrayList<Student>();
    }

    public void storeStudent(Student student)
    {

        student.setId(createId("AB",9));
        studentList.add(student);

    }
     public String createId(String pre, int number)
     {
         Random random = new Random();
          int index = random.nextInt(number);
          return pre + index + " ";
     }
}


public class Student

{
private String studentId;

private String name;


public Student( String name)
{
    studentId = "UnKnow";
    this.name = name;
}
public void setId(String id)
{
    studentId = id;
}
}
4

5 に答える 5

4

UUID を使用できます。

public String createId() //don't need the arguments any more
{
     UUID uuid = UUID.randomUUID();
     return uuid.toString();
}

衝突する可能性は極めて低い。

于 2013-03-25T12:20:20.793 に答える
2

StudentId 変数を static にして、studentId を生成する static メソッドを作成します。

private static studentId = 0;
...
public static int generateStudentId()
{
return studentId++;
}

アプリを停止して再起動する場合に備えて、この値を db や file などに保存することもできます。

于 2013-03-25T12:16:25.620 に答える
1
 private static final AtomicInteger idIncrement = new AtomicInteger();
 public static String createId(String pre /*, int number -- no longer needed*/)
 {
      int index = idIncrement.incrementAndGet();
      return pre + index + " ";
 }

これにより、スレッドセーフな一意の順序付けられた学生 ID が得られます。

于 2013-03-25T12:20:01.700 に答える
0

コレクションで Set を使用してみてください。重複は許可されません。また、次のように Set を List に簡単に変換できます。

List<T> list = new ArrayList<T>(set);

セットの簡単なチュートリアル。

これがお役に立てば幸いです。

ありがとうございます。

于 2013-03-25T12:27:38.903 に答える
0

試す

class Collection {
    static long id = System.currentTimeMillis();

    public void storeStudent(Student student) {
        student.setId(++id + "");
        studentList.add(student);
    }

アプリを再起動した後でも、一意の ID が保証されます。スレッドセーフである必要がある場合は、AtomicLong id = new AtomicLong(System.currentTimeMillis) を使用してください。

于 2013-03-25T12:18:46.617 に答える