【发布时间】:2018-08-24 21:58:29
【问题描述】:
我正在生成 4 个字符的密码,供孩子们在学校使用。引脚必须作为 4 个字符串存储在数据库中。这是我用来生成引脚的方法:
public void generatePin() {
String pin;
Random r = new Random();
for (int i = 0; i < createdStudents.size(); i++) {
int rand = r.nextInt((3998 - 1) + 1) + 1;
if (rand < 10) {
pin = "000" + rand;
} else if (rand < 100) {
pin = "00" + rand;
} else if (rand < 1000) {
pin = "0" + rand;
} else {
pin = "" + rand;
}
createdStudents.get(i).setPin(pin);
}
}
我的问题是:
如果我稍微改变上述方法,将每个引脚添加到 String 类型的 ArrayList 中,那么在该列表中“搜索”并确保一所学校的 2 名学生不使用的最有效方法是什么最终得到相同的引脚?
(注意:每所学校的学生人数永远不会超过 1,200 人)
编辑:
我最终做了以下事情:
public void generatePin() {
List<String> pins = new ArrayList<String>();
String pin;
Random r = new Random();
for (int i = 0; i < createdStudents.size(); i++) {
int rand = r.nextInt((9999 - 1) + 1) + 1;
if (rand < 10) {
pin = "000" + rand;
} else if (rand < 100) {
pin = "00" + rand;
} else if (rand < 1000) {
pin = "0" + rand;
} else {
pin = "" + rand;
}
if (!pins.contains(pin)) {
createdStudents.get(i).setPin(pin);
pins.add(pin);
} else {
i--;
}
}
}
创建一个 ArrayList 来存储引脚,每次生成后检查引脚是否存在于 ArrayList 中。如果没有,请将其分配给学生。如果是这样,请减少循环计数器以返回列表中刚刚引用的索引并生成一个新引脚。这将一直持续到生成唯一的 pin 为止,然后将其分配给学生。
【问题讨论】:
-
if(!list.contains(pin))list.add(pin); -
您可能希望简化用于添加前导零的代码。签出this。
标签: java arraylist duplicates