更轻松的方式来到'或' if语句中的运算符(C#)

时间:2017-01-21 15:34:00

标签: c# if-statement or-operator

我正在制作一个团结的游戏,我有这个' if statement'通过每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);
}

正如您所看到的那样,语句'不是很好,通常它一直持续到waveCount == 100,但我把它切掉了。必须有一个更简单或更简洁的方法来做到这一点:/但我无法绕过它:(

修改1

谢谢,我对模数知之甚少,知道我知道我要阅读的内容:)

9 个答案:

答案 0 :(得分:6)

您可以使用模运算:

if (waveCount % 5 == 0)

答案 1 :(得分:2)

是的,确实有更简单的方法。如果你使用一些数学和逻辑,你可以想出来。

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

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

waveCount <= 100大于100时,我添加waveCount来复制代码的行为,即不进入if语句。

或者,您可以将所有值放入列表中:

var list = new List<int>();
for (int i = 1 ; i <= 20 ; i++) {
    list.Add(i * 5);
}

然后检查列表中是否包含数字:

if (list.Contains(waveNumber))

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

答案 2 :(得分:2)

if (waveCount % 5 == 0 && waveCount <= 50) {
    //...code
}

答案 3 :(得分:1)

如果你的“if”语句的正文只包含shopPanel.SetActive(true);,你就可以在不使用“if”的情况下做到这一点。

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

答案 4 :(得分:0)

试一试

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

答案 5 :(得分:0)

使用modulo - 运算符:

// POST: api/Events
[HttpPost]
public ActionResult PostEvent([FromBody] object savedEvent)
{

    Event addedEvent = JsonConvert.DeserializeObject<Event>(savedEvent.ToString());

    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

运算符计算整数除法的余数。在您的情况下,该语句应返回零,表示您的数字除以if(waveCount % 5 == 0 && waveCount <= 100) ... 没有余数。

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

您可以使用余数运算符:

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

答案 8 :(得分:0)

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

if (waveCount % 5 == 0 && waveCount >= 5 && waveCount <= 50)

C#对整数类型(intlonguint,...)执行整数数学。 例如:

13 / 5 = 2

即。你永远不会得到小数部分。互补操作是模运算。它为您提供了这个部门的其余部分:

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) { ... }