扩展每个IF语句以设置Null

时间:2015-06-24 09:49:36

标签: c# if-statement

我有以下代码,我正在努力。我想扩展每个IF语句,根据结果的结果在clonedGeneratedPegs.PegPosition上设置Null,我没有关于如何做到这一点的概念?

我在位置1-4中有一系列钉子。一个系列(clonedGeneratedPegs)是一组随机生成的钉子(例如红色,蓝色,绿色,绿色)。其他是用户生成的clonedUserGuess(例如黄色,黄色,蓝色,蓝色)

下面的IF语句可以工作,如果它返回true,它会在我的列表中添加白钉,但是使用上面的颜色示例,就我的任务而言,结果将是准确的,我应该只返回在pegResultContainer的白色钉上。不像现在那样(加2)因为我的3和4语句都会在我的列表中添加白钉

所以使用IF块3和4作为我的例子 如果: clonedGeneratedPegs.PegPosition.PegPositon2为Blue,用户clonedUserGuess.PegPosition3为Blue add to list并设置clonedGeneratedPegs.PegPosition.PegPositon2 = Null

这应该意味着如果clonedUserGuess.PegPosition4也是蓝色的,它将不会被添加到pegResultContainer中,因为我已经将clonedGeneratedPegs.PegPosition.PegPositon2设置为NULL,所以我只返回1个白钉。

var clipboardCont = L.DomUtil.get('clipboard-container');
L.DomUtil.setStyle(clipboardCont, 'display', 'inline');
var textArea = L.DomUtil.get('clipboard');
textArea.focus();
textArea.select();

我真的看不出如何告诉每个IF块将其对应的clonedGeneratedPegs位置设置为NULL

感谢您提供任何指导

1 个答案:

答案 0 :(得分:0)

在我看来,你应该在这里做出的最大改进是使用一个阵列作为钉位,而不是单个属性。这将允许您使用循环控制结构来处理比较,而不是复制代码。它还可以更轻松地处理红色和白色结果钉。

我要做的另一个改变是首先检查红色结果钉,因为这是更严格的比较。

考虑到上述情况,我认为代码看起来像这样:

PegColour[] CheckPegs(PegColour[] userGuess, PegColour[] generated)
{
    bool[] matched = new bool[userGuess.Length];
    List<PegColour> result = new List<PegColour>();

    // Look for exact matches
    for (int i = 0; i < userGuess.Length; i++)
    {
        if (userGuess[i] == generated[i])
        {
            result.Add(PegColour.Red);
            matched[i] = true;
        }
    }

    if (result.Count != userGuess.Length)
    {
        // Look for colour matches in wrong position
        for (int i = 0; i < userGuess.Length; i++)
        {
            if (!matched[i])
            {
                for (int j = 0; j < generated.Length; j++)
                {
                    if (!matched[j] && userGuess[i] == generated[j])
                    {
                        result.Add(PegColour.White);
                        matched[j] = true;
                    }
                }
            }
        }
    }

    return result.ToArray();
}

请注意使用第三个数组来跟踪哪些桩已经匹配,因此不考虑进一步检查。实际上,您可以在其中一个数组中使用null值(例如generated数组,这与上面的实现相匹配...您可以使用userGuess数组,但接着是循环上面的“......错误位置”部分需要反转),但这需要修改输入数组(这可能是你“克隆”数据结构的原因吗?)。

使用第三个bool[]对象,您可以跟踪所需的信息,而无需修改输入数组。


如果您没有找到上述帮助,请修改您的问题,使其包含a good, minimal, complete code example,以清楚地说明您的方案,以便更容易理解问题,从而提供更好的答案。