循环无法识别语句

时间:2017-11-26 19:54:21

标签: c# arrays

所以我正在为这个骰子游戏上学,但我偶然发现了这个问题: 首先,让我给出一些背景信息。 我有一个名为diceResults[]的数组,其中抛出的骰子数量保存在数组中(即你滚动了两个,所以数组的第一个索引是2)

现在一对,两对,三种和满屋都工作正常。 但是当满屋滚动时,它会识别出一对,三种,以及满屋。但它并没有认识到三者中的第二对。 我尝试了几种解决方案,但似乎都没有。

        for (int i = 0; i < diceResults.Length; i++)
        {
            if (diceResults[i] == 2)
            {
                onePair = true;

                for (int j = i + 1; j < diceResults.Length; j++)
                {
                    if (diceResults[j] == 2 || diceResults[j] == 3)
                    {
                        twoPair = true;
                    }
                }
            }
        }
        for (int i = 0; i < diceResults.Length; i++)
        {
            if (diceResults[i] == 3)
            {
                threeKind = true;
                for (int k = 0; k < diceResults.Length; k++)
                {
                    if (diceResults[k] == 2)
                    {
                        fullHouse = true;
                    }
                }
            }

我已尝试在下方彼此设置包含if(diceResults[j] == 2)的2个不同的(diceResults[j] == 3)语句,但这似乎也无效。< / p>

我正在使用以下方法检查设置的值。

 private void CheckBoolValues()
    {
        if (onePair == true)
            MessageBox.Show("pair yes");
        if (twoPair == true)
            MessageBox.Show("2 pair yes");
        if (threeKind == true)
            MessageBox.Show("3 of a kind yes");
        if (fourKind == true)
            MessageBox.Show("4 of a kind yes");
        if (yahtzee == true)
            MessageBox.Show("yahtzee yes");
        if (lowStraight == true)
            MessageBox.Show("lowstraight yes");
        if (highStraight == true)
            MessageBox.Show("high straight yes");
        if (fullHouse == true)
            MessageBox.Show("full house yes");
    }

非常感谢一些帮助!

3 个答案:

答案 0 :(得分:0)

您的前几行代码不应该是:

for (int i = 0; i < diceResults.Length; i++)
{
      if ((diceResults[i] == 2) || (diceResults[i] == 3))
      {
           onePair = true;
           ... 

答案 1 :(得分:0)

如果你滚动3个1和2个2,你将永远不会检测到&#34;第二对&#34;,因为第一个循环只会查看骰子总数超过2.但是设置正确在您设置twoPair = true的时候fullHouse = true。此外,您实际上并不需要嵌套循环来实现此功能。

顺便说一下,我不确定Yahtzee的规则是什么,但是有4种被认为是&#34;两对&#34;?

答案 2 :(得分:0)

我个人认为没有任何意义,你想要在三种类型中检测到一对,但无论如何。您可以检查结果中是否已经有两对这样的结果。同样做多个for循环也是多余的。

    bool onePair = false;
    bool twoPair = false;
    bool threeKind = false;
    bool fullHouse = false;

    for (int i = 0; i < diceResults.Length; i++)
    {
        if (diceResults[i] >= 2)
        {
            if(onePair == true) {
                twoPair = true;
            }
            onePair = true;
        }
        if (diceResults[i] >= 3)
        {
            threeKind = true;
            for (int j = 0; j< diceResults.Length; j++)
            {
                if (diceResults[k] == 2)
                {
                    fullHouse = true;
                }
            }
        }
    }