基本上我创建了一个随机化数字然后返回0或随机值的方法。 (取决于数组是否已将该值存储在其中)。目前有2个问题。并非所有路径都返回值。我的循环(i ++)的最后一部分是无法访问的。任何帮助都会很棒。 还有我为随机发生器创建的数组:
int[] arr = new int[4];
继承人的方法:
public int UniqueRandomiser()
{
Random rnd = new Random();
int j = rnd.Next(1, 4);
for (int i = 0; i < 4; i++)
{
if (rand1[i] == j)
{
return 0;
}
else
{
return j;
}
}
}
答案 0 :(得分:1)
我建议使用 Linq 并使代码可读:
// Do not recreate Random (or you're going to have badly skewed values);
// the simplest, but not thread safe
private static Random rnd = new Random();
public int UniqueRandomiser() {
//TODO: what does 4 stand for? Get rid of magic numbers...
int v = rnd.Next(1, 4);
//TODO: another magic number 4; is it connected with the previous one?
// if any of first 4 items of rand1 is equal to v return 0
return rand1.Take(4).Any(item => item == v) ? 0 : v;
}
答案 1 :(得分:1)
您可以在阵列上使用.Contains
来检查号码是否存在:
return randomArray.Contains(randomNumber) ? 0 : randomNumber;
编辑:如果我们要求只检查前4个数字:
return randomArray.Take(4).Contains(randomNumber) ? 0 : randomNumber;
答案 2 :(得分:0)
&#34;无法到达&#34;对于i++
,因为第一次通过循环,它return
在每个代码路径上 - 所以i++
确实永远不会到达。另一个错误是因为是一个假设的(但实际上是不可能的)代码路径,它不会返回一个值 - 如果循环运行完成(它不能返回)而不返回一个值,然后该方法没有返回值。
我希望你的意思是:
public int UniqueRandomiser()
{
Random rnd = new Random();
int j = rnd.Next(1, 4);
for (int i = 0; i < 4; i++)
{
if (rand1[i] == j)
{
return 0;
}
}
return j;
}
然而......这仍然是一种非常糟糕的方式......不管你是不是想做什么。
答案 3 :(得分:0)
我认为这就是你所需要的。
public int UniqueRandomiser()
{
Random rnd = new Random();
int j = rnd.Next(1, 4);
for (int i = 0; i < 4; i++)
{
if (rand1[i] == j)
{
return 0;
}
}
return j;
}
但它确实没有意义。如果返回的号码必须是唯一的,那么它不是真正的随机数。