扩展每个IF语句以设置Null

本文关键字:设置 Null 语句 IF 扩展 | 更新日期: 2023-09-27 17:59:27

我有以下代码正在努力处理。我想根据结果扩展每个IF语句以在克隆的GeneratedPegs.PegPosition上设置Null,但我不知道如何做到这一点?

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

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

以IF块3和4为例如果:克隆的GeneratedPegs.PegPosition2为蓝色,用户克隆的UserGuess.PegPosition 3为蓝色添加到列表并设置克隆的Generated Pegs.PeagPosition.PegPosito2=空

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

if (clonedUserGuess.PegPosition1 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition1.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });

            if (clonedUserGuess.PegPosition2 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition2.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
            if (clonedUserGuess.PegPosition3 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition3.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
            if (clonedUserGuess.PegPosition4 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition4.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });

            return pegResultContainer;

我真的不知道如何告诉每个IF块将其对应的clonedGeneratedPegs Position设置为NULL

感谢您的指导

扩展每个IF语句以设置Null

在我看来,这里应该做的最大改进是为peg位置使用数组,而不是单独的属性。这将允许您使用循环控制结构来处理比较,而不是复制代码。这也将使处理红色与白色的结果钉更容易。

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

考虑到以上内容,我可以想象代码会是这样的:

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[]对象,您可以在根本不修改输入数组的情况下跟踪所需的信息。


如果您找不到上述帮助,请编辑您的问题,使其包含一个好的、最小的完整的