0

我在使用 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

4

2 回答 2

2

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

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

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

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

 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

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

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

于 2017-01-22T14:06:58.660 回答
0

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

于 2017-01-22T23:10:25.340 回答