任何人都可以告诉我我做错了什么吗? 我有4个值(3个随机和1个唯一)我正在尝试做的是确保我没有重复,所以我想一个if语句应该做的伎俩可以有人告诉我,如果这是这样做的方式? 我一直在重复,但不确定if语句是否没有完成其工作或其他事情。
if (value1 == answer | value1 == value2 | value1 == value3)
{
value1 = ans.Next(1, 40);
}
if (value2 == answer | value2 == value1 | value2 == value3)
{
value2 = ans.Next(1, 40);
}
if (value3 == answer | value3 == value2 | value3 == value1)
{
value3 = ans.Next(1, 40);
}
答案 0 :(得分:0)
单个|
是二进制OR,您希望对逻辑OR进行双倍||
。
if (value1 == answer || value1 == value2 || value1 == value3)
答案 1 :(得分:0)
我可能会稍微改变一下。我没有生成三个随机数,而是有一个1到40之间的整数数组,并使用Fisher-Yates对它们进行混洗。然后进入前三名。
//assuming 'answer' is your constant value
var allValues = Enumerable.Range(1, 40).Where(x => x != answer).ToArray();
Shuffle(allValues);
value1 = allValues[0];
value2 = allValues[1];
value3 = allValues[2];
上面链接的网站的随机播放算法
private static Random _random = new Random();
public static void Shuffle<T>(T[] array)
{
var random = _random;
for (int i = array.Length; i > 1; i--)
{
// Pick random element to swap.
int j = random.Next(i); // 0 <= j <= i-1
// Swap.
T tmp = array[j];
array[j] = array[i - 1];
array[i - 1] = tmp;
}
}
由于您正在对现有数字进行洗牌,因此无需检查重复项。
答案 2 :(得分:0)
尝试使用while循环:
while (value1 == answer || value1 == value2 || value1 == value3)
{
value1 = ans.Next(1,40);
}