框架:Java
public static List<Integer> buttonIdList = new ArrayList();
public void myMainMethod() {
for(Integer i = 0; i < 11; i++) {
int randomButtonId = getUniqueIdNumber();
}
}
private static Integer getUniqueIdNumber() {
Random ran = new Random();
int randomButtonId = ran.nextInt(20) + 1;
if(buttonIdList.contains(randomButtonId)) {
getUniqueIdNumber();
} else {
buttonIdList.add(randomButtonId);
}
return randomButtonId;
}
当代码遇到重复时,它会自动调用(递归),在第二次尝试中,如果数字是唯一的,则return语句将其返回给myMainMethod或getUniqueIdNUmber?
退货声明应放在何处?
答案 0 :(得分:7)
您应该返回递归调用的结果:
private static Integer getUniqueIdNumber() {
Random ran = new Random();
int randomButtonId = ran.nextInt(20) + 1;
if(buttonIdList.contains(randomButtonId)) {
return getUniqueIdNumber();
} else {
buttonIdList.add(randomButtonId);
}
return randomButtonId;
}
P.S。,最好将Random ran
变为static
变量,而不是在每次递归调用中创建新的Random
实例。
private static Random ran = new Random();
private static Integer getUniqueIdNumber() {
int randomButtonId = ran.nextInt(20) + 1;
if(buttonIdList.contains(randomButtonId)) {
return getUniqueIdNumber();
} else {
buttonIdList.add(randomButtonId);
return randomButtonId;
}
}
您可以考虑将buttonIdList
更改为HashSet
(如果您关心广告订单,则为LinkedHashSet
),以便更有效地搜索现有号码。