【问题标题】:Or operator/ random number或运算符/随机数
【发布时间】:2017-06-07 01:33:52
【问题描述】:

我在使用 or 运算符和随机数生成器时遇到问题。我希望随机数生成器在 1 和 h 之间提取一个数字,其中 h 由用户选择并存储为 1、6、11 和 16,然后我希望 if 语句查看随机数并确定它是否是做我已经编程或去执行 else 语句。目前它似乎只执行 if 语句而不是 else (第二个 else,第一个工作正常)。我的代码是

        Random random = new Random();
        int ran = random.Next(1, h);
        if (s1 == 0 & s2 == 0 & s3 == 1)
        {
            s3 = s3 - 1;
            cover0.Visible = true;
            p1slable.Visible = true;
            p2slable.Visible = true;
            playagain.Visible = true;
            score.Visible = true;
            p1score.Visible = true;
            p2score.Visible = true;
            c = c + 1;
            p2slable.Text = "" + c.ToString();
            labelscore2.Visible = true;
            winner2.Visible = true;
            hintcover.Visible = true;
            e1.Visible = false;
            e2.Visible = false;
            e3.Visible = false;
        }
        else
        {
            if (s1 == 0 & s2 == 0 & s3 == 2)
            {
                if (ran == 1 || ran == 3 || ran == 4 || ran == 5 || ran == 9 || ran == 10 || ran == 15)
                {
                    s3 = s3 - 2;
                    cover0.Visible = true;
                    p1slable.Visible = true;
                    p2slable.Visible = true;
                    playagain.Visible = true;
                    score.Visible = true;
                    p1score.Visible = true;
                    p2score.Visible = true;
                    c = c + 1;
                    p2slable.Text = "" + c.ToString();
                    labelscore2.Visible = true;
                    winner2.Visible = true;
                    hintcover.Visible = true;
                    e1.Visible = false;
                    e2.Visible = false;
                    e3.Visible = false;
                }
                else { s3 = s3 - 1; }

我正在使用 c# 2015

【问题讨论】:

  • 您是否尝试过将ran 设置为6(或将其移至else 语句的其他值)?
  • 您的问题有点难以理解。你能否清楚地指出哪个如果总是正确的?你是否尝试在调试器中运行它来检查你得到什么样的值以及它们是否符合你的期望。
  • 您在那里缺少一些代码。第一个else 中的if 本身是否有一个else 子句?还是只是关闭代码 sn-p 中缺少的花括号?

标签: c# if-statement random or-operator


【解决方案1】:

首先,您的代码不完整。我假设您的 sn-p 中缺少的只是两个右花括号。

考虑到这一点,让我们重构你的代码,这样 ifselses 的混乱就更容易理解了。

首先,你为什么要检查s1s2 两次?您可以检查一次,然后检查s3

此外,您希望在对大量常量值进行分支时使用switch 语句。它更具可读性,并且无需像您的 ran 检查那样无限和丑陋的orings

 var random = new Random();
 var ran = random.Next(1, h);

 if (s1 == 0 && s2 == 0)
 {
     if (s3 == 1) //case handled: s1 = 0, s2 = 0, s3 = 1
     {
         s3 = s3 - 1;
         //... etc.
     }
     else if (s3 == 2) //case handled: s1 = 0, s2 = 0, s3 = 2
     {
         switch (ran) //all cases handled
         {
             case 1:
             case 3:
             case 4:
             case 5:
             case 9:
             case 10:
             case 15:
                 s3 = s3 - 2;
                 //... etc.
                 break;
             default:
                 s3 = s3 - 1;
                 break               
         }
     }       
 } // s1 != 0 or s2 != 0 will jump here

好的,既然我们已经把它写成这样了,就更容易推断出您正在处理哪些案件以及您没有处理哪些案件。

您只处理s1s2 等于0 并且s3 等于12 的情况。而已。 s1s2s3 的任何其他值将简单地忽略您的整个代码,因为它不会找到匹配的 ifelse 子句。这是你真正想要的吗?

【讨论】:

    【解决方案2】:

    运行调试器,它现在工作正常,不知道为什么它以前不能工作以及调试器做了什么或做了什么。谢谢你花时间帮助我。 (不知道有一个调试器只使用该程序几周制作游戏,(nim))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2012-03-07
      • 2022-10-07
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多