非连续重复的整数数组



我正在尝试生成一个非连续重复的整数数组。到目前为止,我所做的工作非常好,只是偶尔会生成一组双0。我的问题是:

  1. 我该怎么阻止
  2. 必须有更好的方法来做到这一点,对吗?它很难看

我很感谢您能分享的任何见解。

这是代码:

int[] randInts = new int[20];
Random rand = new Random();

for (int i = 0; i < 20; i++)
{
randInts[i] = rand.Next(0, 8);
}
for (int i = 1; i < 20; i++)
{
if (randInts[i] == randInts[i - 1] && randInts[i] < 8 && randInts[i] > 0)
{
randInts[i]--;
}
else if (randInts[i] == randInts[i - 1] && randInts[i] > 0)
{
randInts[i]++;
}
}
public IEnumerable<int> NonConsecutiveRepeatingRandomValues(int upperBound)
{
Random rand = new Random();
int prev = -1;
while(true)
{
int value = prev;
while (value == prev)
value = rand.Next(upperBound);
yield return value;
}
}

然后,为了得到正好20个值(而不是永远循环(,可以这样调用:

var randInts = NonConsecutiveRepeatingRandomValues(8).Take(20).ToArray();

但是,只有当确实需要一个数组时,才使用ToArray()调用。你会惊讶于没有它你还能过多久。

如果你和上次掷相同的数字,你就再掷一次怎么样?

int[] randInts = new int[20];
Random rand = new Random();
int lastVal = -1;
int val = -1;
for (int i = 0; i < 20; i++)
{   
while (val == lastVal)
val = rand.Next(0, 8);  
randInts[i] = val;
lastVal = val;
}

当然,你会生成比你需要的更多的随机数,但性能损失不会很大。

最新更新