我有以下代码,我正在努力。我想扩展每个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
感谢您提供任何指导
答案 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,以清楚地说明您的方案,以便更容易理解问题,从而提供更好的答案。