扩展每个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
感谢您的指导
在我看来,这里应该做的最大改进是为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[]
对象,您可以在根本不修改输入数组的情况下跟踪所需的信息。
如果您找不到上述帮助,请编辑您的问题,使其包含一个好的、最小的、完整的