我通过包含一个数组重新尝试了以前的问题。该程序没有错误,但数字仍然重复。这是我的代码:
public static String ball() {
String var = null;
int ranVar[] = new int[75];
final Random ran = new Random();
int temp;
for (int i = 0; i < ranVar.length; i++) {
do {
temp = ran.nextInt(74) + 1;
} while (match(temp, ranVar));
ranVar[i] = temp;
if (ranVar[i] <= 15) {
return var = "B" + ranVar[i];
} else if (ranVar[i] <= 30) {
return var = "I" + ranVar[i];
} else if (ranVar[i] <= 45) {
return var = "N" + ranVar[i];
} else if (ranVar[i] <= 60) {
return var = "G" + ranVar[i];
} else if (ranVar[i] <= 75) {
return var = "O" + ranVar[i];
}
}
return null;
}
private static boolean match(int temp, int var[]) {
for (int i = 0; i < var.length; i++) {
if (temp == var[i]) {
return true;
}
}
return false;
}
感谢您的帮助。
在线评论
// Seed your random number generator
final static Random ran = new Random(System.currentTimeMillis());
// create a set to store previously generated random numbers
static Set<Integer> usedIntegers = new HashSet<>();
// generate numbers until a number is found which is not been selected
public static int nextAvailableRandomInteger(){
int temp;
do{
temp = ran.nextInt(74) + 1;
} while (usedIntegers.contains(temp));
usedIntegers.add(temp);
return temp;
}
// I have no idea what this method does. So I changed the random number generator part.
public static String ball() {
String var = null;
int ranVar[] = new int[75];
int temp;
for (int i = 0; i < ranVar.length; i++) {
do {
temp = nextAvailableRandomInteger();
} while (match(temp, ranVar));
ranVar[i] = temp;
if (ranVar[i] <= 15) {
return var = "B" + ranVar[i];
} else if (ranVar[i] <= 30) {
return var = "I" + ranVar[i];
} else if (ranVar[i] <= 45) {
return var = "N" + ranVar[i];
} else if (ranVar[i] <= 60) {
return var = "G" + ranVar[i];
} else if (ranVar[i] <= 75) {
return var = "O" + ranVar[i];
}
}
return null;
}
private static boolean match(int temp, int var[]) {
for (int i = 0; i < var.length; i++) {
if (temp == var[i]) {
return true;
}
}
return false;
}
// I have no idea what this method does. So I changed the random number generator part.
public static String ball() {
String var = null;
int ranVar[] = new int[75];
int temp;
for (int i = 0; i < ranVar.length; i++) {
do {
temp = nextAvailableRandomInteger();
} while (match(temp, ranVar));
ranVar[i] = temp;
if (ranVar[i] <= 15) {
return var = "B" + ranVar[i];
} else if (ranVar[i] <= 30) {
return var = "I" + ranVar[i];
} else if (ranVar[i] <= 45) {
return var = "N" + ranVar[i];
} else if (ranVar[i] <= 60) {
return var = "G" + ranVar[i];
} else if (ranVar[i] <= 75) {
return var = "O" + ranVar[i];
}
}
return null;
}
private static boolean match(int temp, int var[]) {
for (int i = 0; i < var.length; i++) {
if (temp == var[i]) {
return true;
}
}
return false;
}
PS:这不是最好的方法。最终,该集合将填充75个数字,并且没有退出循环的方法,该程序将无限期运行。改善此状况的一种方法是生成一个数字列表,然后从该列表中进行选择,然后删除使用的数字,这样,当您进入空白列表时,游戏就会停止。