C# WinForms魔方求解器solveTopFace方法无限循环问题求助
我用C# WinForms开发魔方求解器,通过Topface、Leftface、Rightface、Bottomface、Backface、Frontface这6个二维数组记录魔方每个面的状态。运行下方solveTopFace方法时程序陷入无限循环,RotateDownNinety()、CheckTopFace()等都是自定义函数,求解决思路。
private void solveTopFace() { rotateDownNinety(); checkTopFaceColour(); while (checkTopFace() == false) { if (Topface[1,1] == topfaceColour) { topFaceCornerAlgorithm(); } else if (Topface[0,1] == topfaceColour) { rotateRightNinety(); topFaceCornerAlgorithm(); } else if (Topface[0,0] == topfaceColour) { rotateRightNinety(); rotateRightNinety(); topFaceCornerAlgorithm(); } else if (Topface[1,0] == topfaceColour) { RotateLeftNinety(); topFaceCornerAlgorithm(); } else if (Frontface[1,0] == topfaceColour) { topFaceCornerAlgorithm(); } else if (Rightface[1,0] == topfaceColour) { rotateRightNinety(); topFaceCornerAlgorithm(); } else if (Backface[1, 0] == topfaceColour) { rotateRightNinety(); rotateRightNinety(); topFaceCornerAlgorithm(); } else if (Leftface[1, 0] == topfaceColour) { RotateLeftNinety(); topFaceCornerAlgorithm(); } } }
排查方向:
先确认
checkTopFace()的逻辑正确性
这个函数是判断顶面是否完全还原的核心,得确保逻辑准确:比如是否检查了顶面所有9个方块都等于topfaceColour,而非只判断中心块?如果中心块本来正确但边角未还原,checkTopFace()却错误返回true会提前结束;反过来如果逻辑有误一直返回false,必然导致无限循环。验证
topFaceCornerAlgorithm()的执行效果
每次执行这个算法后,魔方状态应该向顶面还原推进。可以手动跟踪或加日志记录执行后的顶面状态,看看是不是每次执行后状态无变化——如果算法实现错误,执行后魔方回到之前的状态,循环就会一直跑下去。检查分支覆盖情况
当前的if-else有没有覆盖所有可能状态?如果存在某个状态不满足任何条件,循环体里什么都不做,checkTopFace()一直为false,就会无限循环。建议加个else分支,输出当前各面关键状态,方便定位遗漏场景。确认旋转函数的正确性
rotateDownNinety、rotateRightNinety、RotateLeftNinety这些旋转函数,是否正确修改了对应面和相邻面的二维数组元素?比如旋转右面时,有没有同步更新顶面、底面、前面、后面的对应方块?旋转逻辑错误会导致顶面状态无法正确推进,循环自然无法退出。加日志调试
在循环内每次执行操作前后,记录Topface、Frontface等关键面的状态,以及checkTopFace()的返回值,能直观看到每次循环后状态有没有变化,是卡在某个分支,还是状态一直没进展。
内容的提问来源于stack exchange,提问作者Bradley Stirling

