Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
更简单的方法';或';if语句中的运算符(C#)_C#_If Statement_Or Operator - Fatal编程技术网

更简单的方法';或';if语句中的运算符(C#)

更简单的方法';或';if语句中的运算符(C#),c#,if-statement,or-operator,C#,If Statement,Or Operator,我正在unity中制作一个游戏,我有一个“如果声明”,每5次波动,我的商店菜单就会变得可见。代码确实有效,但我确信我做错了什么,或者可以做得更好 if (waveCount == 5 || waveCount == 10 || waveCount == 15 || waveCount == 20 || waveCount == 25 || waveCount == 30 || waveCount == 35 || waveCount == 40 || waveCount == 45 || wav

我正在unity中制作一个游戏,我有一个“如果声明”,每5次波动,我的商店菜单就会变得可见。代码确实有效,但我确信我做错了什么,或者可以做得更好

if (waveCount == 5 || waveCount == 10 || waveCount == 15 || waveCount == 20 || waveCount == 25 || waveCount == 30 || waveCount == 35 || waveCount == 40 || waveCount == 45 || waveCount == 50)
{
    // yield return new WaitForSeconds(shopWait);
    shopPanel.SetActive(true);
}
正如您可以看到的那样,“if语句”不是很好,通常它会一直持续到
waveCount==100
,但我把它删掉了。必须有一种更简单或更干净的方法来做到这一点,但我就是不能对此束手无策:(

编辑1


谢谢,我对模不太了解,知道我知道我要读什么:)

你可以使用模运算:


如果(waveCount%5==0)
您可以使用模运算:

如果(waveCount%5==0)
试试看

if (waveCount % 5 == 0 && waveCount <= 50)
if(waveCount%5==0&&waveCount试试看

if (waveCount % 5 == 0 && waveCount <= 50)
如果(waveCount%5==0&&waveCount使用-运算符:

if(waveCount % 5 == 0 && waveCount <= 100) ...
如果(waveCount%5==0&&waveCount使用-运算符:

if(waveCount % 5 == 0 && waveCount <= 100) ...

如果(waveCount%5==0&&waveCount只是为了概括:如果您拥有的数据与模式不匹配,您可以将所有要匹配的内容放在一个集合中,然后测试集合的成员资格:

var thingsToMatch = Set(2, 5, 8, 14, 23, 80, 274...);
if (someNumber in thingsToMatch) {...} 

只要您知道集合不是在每次调用函数时都被重新创建,这已经被证明是相当快的。如果您的语言没有自动缓存集合,您可以将其作为函数的静态变量。

只是为了概括:如果您拥有的数据与模式不匹配,您可以将所有要匹配的内容放在一起在集合中,然后测试集合的成员资格:

var thingsToMatch = Set(2, 5, 8, 14, 23, 80, 274...);
if (someNumber in thingsToMatch) {...} 

只要您知道集合不是每次调用函数时都重新创建的,这已经被证明是相当快的。如果您的语言没有自动缓存集合,您可以将其设置为函数的静态变量。

您可以使用余数操作符:

if (waveCount % 5 == 0 && waveCount > 0 && waveCount <= 50)
{
    //yield return new WaitForSeconds(shopWait);
    shopPanel.SetActive(true);
}

如果(waveCount%5==0&&waveCount>0&&waveCount您可以使用余数运算符:

if (waveCount % 5 == 0 && waveCount > 0 && waveCount <= 50)
{
    //yield return new WaitForSeconds(shopWait);
    shopPanel.SetActive(true);
}

如果(waveCount%5==0&&waveCount>0&&waveCount是的,确实有更简单的方法可以做到这一点。如果你使用一点数学和逻辑,你就可以解决这个问题

由于要检查
waveCount
的值是否为5的倍数,因此可以使用
%
获取
waveCount/5
的提醒。如果该提醒为0,
waveCount
为5的倍数

if (waveCount % 5 == 0 && waveCount <= 100)
然后检查列表是否包含以下编号:

if (list.Contains(waveNumber))

这样做的好处是,如果你决定改变游戏的工作方式,并说商店菜单可以在waves 9、52和77打开,你只需将数字添加到列表中,而不修改if语句。这提供了很大的灵活性。

是的,确实有更简单的方法。如果你使用一点数学和逻辑c、 你可以找到答案

由于要检查
waveCount
的值是否为5的倍数,因此可以使用
%
获取
waveCount/5
的提醒。如果该提醒为0,
waveCount
为5的倍数

if (waveCount % 5 == 0 && waveCount <= 100)
然后检查列表是否包含以下编号:

if (list.Contains(waveNumber))

这样做的好处是,如果您决定改变游戏的工作方式,并说可以在waves 9、52和77打开商店菜单,您只需将数字添加到列表中,而不修改if语句。这提供了很大的灵活性。

您可以测试除5的其余部分是否为0,这意味着数字is可被5整除

if (waveCount % 5 == 0 && waveCount >= 5 && waveCount <= 50)
也就是说,你永远不会得到小数部分。互补运算是模运算。它给出除法的剩余部分:

13 % 5 = 3
也就是说,13/5是2加上余数3。除法和模运算一起允许您执行反向运算

(5 * (13 / 5)) + (13 % 5) =  
(5 *     2   ) + (   3  ) =  13

如果您有不规则的图形,则不同的方法是使用
switch
语句:

switch (waveCount) {
    case 5:
    case 10:
    case 15:
    case 20:
    case 25:
    case 30:
    case 35:
    case 40:
    case 45:
    case 50:
        shopPanel.SetActive(true);
        break;
}
或允许值的数组:

private static readonly int[] AllowedValues =
    new int[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 };

if(Array.IndexOf(AllowedValues, waveCount) >= 0) { ... }

您可以测试被5除的余数是否为0,这意味着该数字可以被5除

if (waveCount % 5 == 0 && waveCount >= 5 && waveCount <= 50)
也就是说,你永远不会得到小数部分。互补运算是模运算。它给出除法的剩余部分:

13 % 5 = 3
也就是说,13/5是2加上余数3。除法和模运算一起允许您执行反向运算

(5 * (13 / 5)) + (13 % 5) =  
(5 *     2   ) + (   3  ) =  13

如果您有不规则的图形,则不同的方法是使用
switch
语句:

switch (waveCount) {
    case 5:
    case 10:
    case 15:
    case 20:
    case 25:
    case 30:
    case 35:
    case 40:
    case 45:
    case 50:
        shopPanel.SetActive(true);
        break;
}
或允许值的数组:

private static readonly int[] AllowedValues =
    new int[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 };

if(Array.IndexOf(AllowedValues, waveCount) >= 0) { ... }

if(waveCount%5==0&&waveCount
if(waveCount%5==0&&waveCount如果您的“if”语句的主体只包含
shopPanel.SetActive(true);
您甚至不用像那样使用“if”就可以做到这一点

shopPanel.SetActive(waveCount % 5 == 0 && waveCount <= 50);

shopPanel.SetActive(waveCount%5==0&&waveCount如果您的“If”语句的主体只包含
shopPanel.SetActive(true);
您甚至不用像那样使用“If”就可以做到这一点

shopPanel.SetActive(waveCount % 5 == 0 && waveCount <= 50);

shopPanel.SetActive(waveCount%5==0&&waveCount使用模运算:
%
,当左侧除以右侧时,它会给出余数。如果余数为零,则左侧是右侧的整数倍,请尝试:
If(waveCount%5==0)
使用模运算符:
%
当左侧除以右侧时,该运算符将给出余数。如果余数为零,则左侧是右侧的整数倍,因此请尝试:
如果(waveCount%5==0)