任何人都可以帮助我制作一个方法来产生随机数,而无需在Android重复? 最大数量为:prjcts.size();
这是我的JSON数组。返回值应该是整数。android:生成没有重复的随机数
我已经有的是: int i = (int)(prjcts.size() * Math.random());
我铸造的方法3次,因为我需要3个随机生成的数字。它有效,但我不知道如何不重复。所以这三个数字在彼此之间不会相同。
谢谢
任何人都可以帮助我制作一个方法来产生随机数,而无需在Android重复? 最大数量为:prjcts.size();
这是我的JSON数组。返回值应该是整数。android:生成没有重复的随机数
我已经有的是: int i = (int)(prjcts.size() * Math.random());
我铸造的方法3次,因为我需要3个随机生成的数字。它有效,但我不知道如何不重复。所以这三个数字在彼此之间不会相同。
谢谢
您是否尝试过只用Math.random()?
只是做一些铸造魔术,你会好起来:
int index = (int)((double)prjcts.size() * Math.random());
编辑:
如果你想避免重复,您可以创建与所有可能的索引列表。
int max = prjcts.size();
List<int> indices = new ArrayList<int>(max);
for(int c = 0; c < max; ++c)
{
indices.add(c);
}
那么你一定要随机指数每一次,只是随机选择一个项目从列表,从列表中删除后它,当你完成
int arrIndex = (int)((double)indices.size() * Math.random());
int randomIndex = indices.get(arrIndex);
indices.remove(arrIndex);
randomIndex
现在保证是从未使用过的JSON列表的索引。
是的,我已经完成了这之前:int i =(int)(prjcts.size()* Math.random());它的作品,但我不知道如何不重复。所以这三个数字在彼此之间不会相同。 Thx – hectichavana 2011-04-27 16:47:45
谢谢!这是我最喜欢的解决方案! :) – hectichavana 2011-04-28 11:52:18
没问题,但说实话,我不知道'Collections.shuffle()'。 Haphazard的解决方案是完成完全相同的事情的更简洁的方式。 – 2011-04-28 15:51:52
我在你的其他问题中提及如何做到这一点..
List<Integer> list = new ArrayList<Integer>();
int jsonMax = prjcts.size();
for(int i = 1; i<=jsonMax; i++)
list.add(i);
Collections.shuffle(list);
for(int i=0; i<jsonMax; i++) {
int n = list.get(i);
//n is a random, unique number between 1 and prjcts.size()
}
的一种方法,从0与出重复获得N个随机数到N-1是创建这N个数字阵列和创建一个随机数字,它将选择该数组的一个索引。然后从该数组中删除索引,并继续使用N-1号码等。
class NoRepeatRandom
{
private int[] number = null;
private int N = -1;
private int size = 0;
public NoRepeatRandom(int minVal, int maxVal)
{
N = (maxVal - minVal) + 1;
number = new int[N];
int n = minVal;
for(int i = 0; i < N; i++)
number[i] = n++;
size = N;
}
public void Reset() { size = N; }
// Returns -1 if none left
public int GetRandom()
{
if(size <= 0) return -1;
int index = size * Math.random();
int randNum = number[index];
// Swap current value with current last, so we don't actually
// have to remove anything, and our list still contains everything
// if we want to reset
number[index] = number[size-1];
number[--size] = randNum;
return randNum;
}
}
void Test()
{
NoRepeatRandom nrr = new NoRepeatRandom(0, 10);
for(int i = 0; i < 12; i++)
System.out.println("Random number: " + nrr.GetRandom());
}
为了什么它的价值,你可以尝试使用Mersenne Twister算法,其中有一个Java实现它here。 Mersenne Twister是一个随机数发生器,其周期为2^19937 - 1,因此几乎保证不会得到相同的随机数。
没有重复在一个循环或在一个运行时或什么? – Fredrik 2011-04-27 16:43:15
我做了这个int i =(int)(prjcts.size()* Math.random());用不同的变量3次。因为我需要3个随机生成的数字,最大值是我的JSON条目的最大数量。它的作品,但我不知道如何不重复。所以这三个数字在彼此之间不会相同。 Thx – hectichavana 2011-04-27 16:45:02