Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有或的if语句_C#_If Statement_Xna - Fatal编程技术网

C# 带有或的if语句

C# 带有或的if语句,c#,if-statement,xna,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 | valu

谁能告诉我我做错了什么? 我有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); 
}

单个
|
是二进制的,或者,您需要双
|
作为逻辑OR

if (value1 == answer || value1 == value2 || value1 == value3)

我可能会以稍微不同的方式来处理这个问题。我不需要生成三个随机数,而是使用1到40之间的整数数组,并使用。那就选前三名吧

//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;
    }
}
private static Random\u Random=new Random();
公共静态无效洗牌(T[]数组)
{
var random=_random;
对于(int i=array.Length;i>1;i--)
{
//选择要交换的随机元素。

int j=random.Next(i);//0尝试使用while循环:

while (value1 == answer || value1 == value2 || value1 == value3)
{
   value1 = ans.Next(1,40);
}

那么,有什么可以阻止你再次从
ans获得相同的东西呢?下一步
?代码正在更新,所以我认为它会再次更改它?我不知道你的意思。但我怀疑你想在
循环时使用
。我只能重复我(现在已删除的答案)中告诉我的内容这是不正确的。布尔和整数上的|运算符完全合法。完全合法与“做程序员想做的事”不同。空的main也完全合法。例如,如果二进制运算符短路,我会感到惊讶。
if(true | false | false)
?我认为,在这种情况下,没有什么区别。如果你想让它们二进制或“ed”在一起,并且结果由If计算,那么当然。如果你想让它们一个接一个地计算,当你找到第一个真值时停止,因为这会使结果为真,那么不,它是不一样的。如果你只看结果,当然,它是一样的。它将如果你只是把if全部省略,那么d是相同的。相同的结果。不同的程序。这不是我的意思,条件
value1==answer
是一个布尔值,对于下一个条件,逻辑OR与布尔值的比较产生了与条件OR相同的结果。因此,从问题的角度来看,你的答案无法产生与当前情况不同的结果。