您的位置:首页 > 移动开发 > Unity3D

【Unity&C#&随机数】如何产生连续不重复的随机数

2017-03-24 23:44 411 查看
有几种思路,主要是打乱 顺序。

1.打乱 随机数的随机数数组 每个顺序的数组的

参考资料1里面,可以考虑先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...),将该位置的数与最后一个位置的数对调就可以了。

产生的是 连续不重复的随机数数组

把参考资料1 里面的函数改了一下,能够 随机 连续且不重复的随机数

int frame = 0;
void Update()
{

if (Input.anyKeyDown)
{
ss(1, 10); frame++;
}

}
void ss(int min,int max)
{
int rang = max - min;
int[] arr = new int[rang +1];
int i;
//初始化数组
for(i=0;i<= rang; i++)
{
arr[i] = max < min + i ? max : min + i ;
}
//随机数
for (int j = rang; j >= 0; j--)
{
int address = Random.Range(0, j);//获得一个 第 随机数address 的数组的序号
int tmp = arr[address];
arr[address] = arr[j];//调换位置
arr[j] = tmp;
}
//输出
foreach (int k in arr)
{
print(k+" "+ frame);
}
}


点击一下就,随机一次,并在后面显示点击的次数

如何在 一个不连续的数组 里面取随机数

int frame = 0;
int[] array = { 1,2,3};
void Update()
{

if (Input.anyKeyDown)
{
ss(array); frame++;
}

}
void ss(int[] array_int)
{
//随机数
for (int j = array_int.Length -1; j >= 0; j--)
{
int address = Random.Range(0, j);//获得一个 第 随机数address 的数组的序号
int tmp = array_int[address];
array_int[address] = array_int[j];//调换位置
array_int[j] = tmp;
}
//输出
foreach (int k in array_int)
{
print(k + " " + frame);
}
}//


参考资料:

1.

Unity3D中不重复随机数数组

2.

有关Random.Next(C#)

3.

不重复随机数列生成算法

4.

生产N个不重复的随机数(从一个数组中随机取N个元素)

5.

6.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: