[英]How to generate random numbers without repetition
我用这段代码生成一个随机数:
int randomNumber = (int) (Math.random() * 7);
我想停止生成重复的数字,我想在我的应用再次打开后生成一个新的数字。
我能怎么做 ?
将您生成的数字存储在Set
。 然后,每次生成新的随机数时,请测试它在本Set
已存在。
Set<Integer> nums = new HashSet<Integer>();
// Initialize set on app boot
int rnum;
do {
rnum = (int) (Math.random() * 7);
} while (!nums.contains(rnum));
// Update the set
nums.add(rnum);
// Use rnum now..
您还需要在应用关闭之前保留Set
值; 在onPause()
或onStop()
方法中。 您可以使用SharedPreferences
或简单地序列化/反序列化Set
。 使用数据库将是一种过度杀伤力。
这是一种可以确保没有重复的方法;
public int generateRandomNumber(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
final int lastNumber = sp.getInt("lastNumber", 0);
int randomNumber = (int) (Math.random() * 7);
while(randomNumber == lastNumber){
randomNumber = (int) (Math.random() *7);
}
sp.edit().putInt("lastNumber", randomNumber).apply();
return randomNumber;
}
编辑:这是一个愚蠢的方式来做你想要的:
String _p = sp.getString("previousNumbers", "");
String[] previousNumbers = _p.split(";");
int randomNumber = (int) (Math.random() * 7);
while(Arrays.asList(previousNumbers).contains(Integer.toString(randomNumber))
{
randomNumber = (int) (Math.random() * 7);
}
_p.concat(Integer.toString(randomNumber) + ";");
sp.edit().putString("previousNumbers",_p).apply();
return randomNumber;
要在每个打开的应用程序中生成不同的值,您可以使
System.currentTimeMillis()
这将返回long
而不是int
第1步:创建数组
第2步:使用正确的数字填充数组
第3步:随机播放阵列。
private Integer[] randomNumbersRange(int numberRange) {
//Create and shuffle array
Integer[] randomNumbers = new Integer[numberRange];
for (int i = 0; i < randomNumbers.length; i++) {
randomNumbers[i] = 1 + i;
}
Collections.shuffle(Arrays.asList(randomNumbers));
return randomNumbers;
}
也许请查看使用系统时间戳或您在应用程序外部保留的其他值(在存储/数据库/等中)播种您的号码。
https://developer.android.com/reference/java/util/Random.html#setSeed(long)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.