如果声明用或

时间:2014-01-05 16:31:09

标签: c# if-statement xna

任何人都可以告诉我我做错了什么吗? 我有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); 
}

3 个答案:

答案 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);
}