java - 所有井字棋棋盘的可能性 - 代码日志 - Java递归通用树
问题描述
我正在尝试使用 java 中的递归和树在游戏井字游戏中生成所有可能的动作。
我正在使用我发现很难的通用树和递归。但是,树中的第一代应该填充 1 个点,然后下一代填充 2 个点,然后下一代填充 3 个点,然后下一代填充 4 个点,依此类推。
我的目标是创建一个节点:
#
/
#-#-#-#-#-#-#-#-#
/ / / / / / / / /
(should be filled) #-#-#-#-#-#-#-#-#
每个子节点有 9 个兄弟节点。每个兄弟姐妹有 1/9 可能的展示位置。一个“X”或“O”被交替放置在每一代新的孩子中(在这 9 个位置中的 1 个位置)。到最后一代,树应该被 X 和 O 填充。
麻烦:我的 insertLayer 方法被无限递归调用。当我输入一个计数器来跟踪它的增长方式时,它会卡在 6-8 之间。
解决方案
这个条件总是成立的:
if (gameBoard[i][j] != 'X' || gameBoard[i][j] != 'O')
所以你会永远递归。
更改||
为&&
:
if (gameBoard[i][j] != 'X' && gameBoard[i][j] != 'O')
或者更好,因为它更清晰、更简单:
if (gameBoard[i][j] != ' ')
注意:这可能不是您唯一的错误,但它是我注意到的最明显和最严重的错误。
推荐阅读
- flutter - 如何更改 showModalBottomSheet 的大小?[扑]
- oracle - jdbctemplate 等效于以下查询
- javascript - 在 chrome android 上使用 speechSynthesis.resume() 恢复暂停的语音不起作用
- javascript - 当用户擦洗音频javascript时显示新图像
- r - R中是否有创建离散概率分布的函数?
- image-processing - 如何为图像分割准备训练数据
- rust - 当一个值将在启动时写入一次然后只读取时,嵌入式 Rust 中是否有一个轻量级的 Mutex 替代方案?
- docker - 如何配置 nginx 以运行烧瓶和节点
- javascript - 如何使用其他页面的链接打开特定选项卡?
- git - 运行 git commit 但不能推送后,我可以取回我的文件夹吗?