在java中使用随机实用程序时,你会得到一些这样的数字:1271,34556,177等等......最简单的方法是什么,这样数字不会重复?
答案 0 :(得分:9)
你可以随机播放数组[1,2,3,4,5,6,7,8,9]并将其作为数字读取。
如果您不想修改位数,或允许非前导零,则会变得更复杂(如果您关心某种平等分配)。
答案 1 :(得分:6)
您可以使用数字List
初始化0-9
。然后随机化此列表并从该列表中轮询随机数量的元素(1到9之间)。连接数字,你的数字是非重复数字。
答案 2 :(得分:3)
如何创建一个循环来检查生成的随机数是否符合您的要求。
final Random rnd = new Random();
int n;
do {
n = rnd.nextInt(1000);
} while(containsRepeatingDigits(n));
containsRepeatingDigits
可能如下所示:
boolean containsRepeatingDigits(final int n) {
final boolean digits[] = new boolean[10];
for(char c : String.valueOf(n).toCharArray()) {
final int i = c-'0';
if(digits[i])
return true;
digits[i] = true;
}
return false;
}
答案 3 :(得分:1)
您可以检查随机数是否具有重复数字并生成新数字。它是用C#编写的,但您应该能够轻松地将其转换为Java。
private static Random rand = new Random();
public static int GenerateNumberNonRepeat()
{
int number;
do
{
number = rand.Next();
} while (IsRepeating(number));
return number;
}
public static bool IsRepeating(int number)
{
string textual = number.ToString();
for (int i = 0; i < textual.Length; i++)
{
for (int j = i + 1; j < textual.Length; j++)
{
if (textual[i] == textual[j])
return true;
}
}
return false;
}
答案 4 :(得分:0)
生成这些数字的另一种方法是生成任意数字,并且如果它包含重复数字或者生成新数字,或者删除重复数字(例如通过递增数字直到不再有重复数字)。
与提议的shuffle / select方法相比,这具有优势,即保持(或多或少)原始rng的分布。
答案 5 :(得分:0)
此代码可以帮助您
Set set = new HashSet<Integer>();
Random rand= new Random();
public int getNonRepeatingRandomNumber() {
int intV = rand.nextInt();
if(set.contains(intV)) {
return getNonRepeatingRandomNumber();
}
else {
set.add(intV);
return intV;
}
}