-1

方法 generateId 为学生分配 id,方法 storeStudent 被 readData 方法调用,该方法读取数据,数据中的 StudentId 字段都设置为未知,因此方法 storeStudent 将单词 unknown 替换为每个学生的唯一 id,但是如果我有超过 10 个学生,它会出现问题,它会再次重复相同的 id,我试图避免 id 重复,所以我该如何解决这个问题

公共无效storeStudnet(学生学生){

        student.setId(generateCustomerId("AB-",1));

         for(Student students : studentList)
        {
        if(student.getStudentID().equals(student.getStudentID()))
         {
             student.setId(generateId("AB-",1));
         } 

        }

}
  studentList.add(student);
 }


   public String generateId(int numberaOfDigits)
{
    Random random = new Random();
    for(int i=0;i<numberaOfDigits;i++)
    {

       random.nextInt(9);  

    }

    return  random.nextInt(9);
} 
4

2 回答 2

0

如果您为此使用数据库和诸如 Hibernate 之类的 ORM,那么您已经有注释 (@Id) 可以解决这个问题。

如果您想自己创建它,您可能需要使用同步方法来处理始终递增 id。Random 不是一个好的选择,不能保证它不会选择一个已经存在的数字(检查Random API)。

于 2013-04-04T01:07:50.637 回答
0

我认为最好的解决方案是在评论中不断增加数字。但是,如果这不符合您的要求,您可以保留一个单独的生成 id 列表,并使用 list.contains() 检查 id 是否已生成。一个样本可能是这样的:

ArrayList<int> id = new ArrayList<int>() ;
Random random = new Random();
public int generateId(int numberaOfDigits)
{
  int x = random.netxInt(number);
  while(id.contains(x))
       {
        x = random.nextInt(number)
        }
  return x;
}

另外,您发布的代码中存在一些错误:

  1. 您在 generateId() 中返回一个 int,但您定义了返回类型 String。
  2. 我不确定你想用 generateId() 中的 for 循环做什么,但它没有做任何事情,接受生成甚至没有存储在任何地方的新随机数。
于 2016-03-27T05:15:11.223 回答