这有 2个方法 一个叫 Draw 一个叫 GetRandom ;他们的算法都是一样的,功能是为了实现 随机排列一组数字,比如 0到5之间的数组随机排列二不重复。 两个方法的算法完全一样。 但是 打印出来的 数字不一样!
GetRandom正常运算(随机排列数组不重复), Draw 不能正常运算(打印出来的都是1)。 在算法相同的情况下,为何 Draw异常?
public void Draw(int min, int max)
{
int rang = max - min;
int[] arr = new int[rang + 1];
int i;
sbyte Add = -1;
for (i = 0; i <= rang; i++)
{
arr[i] = max < min ? max : min + 1;
}
for (int j = rang; j >= 0; j--)
{
int address = UnityEngine.Random.Range(0, j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
foreach (int item in arr)
{
Debug.Log($"Value={item}");
Add++;
}
}
public virtual void GetRandom(int min, int max)
{
//制作一个 数组 能容纳 最小数到最大数
int rang = max - min;
int[] arr = new int[rang + 1];
int i;
sbyte Add = -1;
for (i = 0; i <= rang; i++)
{
arr[i] = max < min ? max : min + i;
}
for (int j = rang; j >= 0; j--)
{
int address = UnityEngine.Random.Range(0, j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
foreach (int item in arr)
{
Debug.Log($"value={item}");
Add++;
}
}
GetRandom正常运算(随机排列数组不重复), Draw 不能正常运算(打印出来的都是1)。 在算法相同的情况下,为何 Draw异常?
public void Draw(int min, int max)
{
int rang = max - min;
int[] arr = new int[rang + 1];
int i;
sbyte Add = -1;
for (i = 0; i <= rang; i++)
{
arr[i] = max < min ? max : min + 1;
}
for (int j = rang; j >= 0; j--)
{
int address = UnityEngine.Random.Range(0, j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
foreach (int item in arr)
{
Debug.Log($"Value={item}");
Add++;
}
}
public virtual void GetRandom(int min, int max)
{
//制作一个 数组 能容纳 最小数到最大数
int rang = max - min;
int[] arr = new int[rang + 1];
int i;
sbyte Add = -1;
for (i = 0; i <= rang; i++)
{
arr[i] = max < min ? max : min + i;
}
for (int j = rang; j >= 0; j--)
{
int address = UnityEngine.Random.Range(0, j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
foreach (int item in arr)
{
Debug.Log($"value={item}");
Add++;
}
}