首页 > 解决方案 > 所有井字棋棋盘的可能性 - 代码日志 - Java递归通用树

问题描述

我正在尝试使用 java 中的递归和树在游戏井字游戏中生成所有可能的动作。

我正在使用我发现很难的通用树和递归。但是,树中的第一代应该填充 1 个点,然后下一代填充 2 个点,然后下一代填充 3 个点,然后下一代填充 4 个点,依此类推。

我的目标是创建一个节点:

       #
      / 
     #-#-#-#-#-#-#-#-#
    / / / / / / / / /
(should be filled) #-#-#-#-#-#-#-#-#

每个子节点有 9 个兄弟节点。每个兄弟姐妹有 1/9 可能的展示位置。一个“X”或“O”被交替放置在每一代新的孩子中(在这 9 个位置中的 1 个位置)。到最后一代,树应该被 X 和 O 填充。

麻烦:我的 insertLayer 方法被无限递归调用。当我输入一个计数器来跟踪它的增长方式时,它会卡在 6-8 之间。

标签: javarecursiontreetic-tac-toe

解决方案


这个条件总是成立的:

if (gameBoard[i][j] != 'X' || gameBoard[i][j] != 'O')

所以你会永远递归。

更改||&&

if (gameBoard[i][j] != 'X' && gameBoard[i][j] != 'O')

或者更好,因为它更清晰、更简单:

if (gameBoard[i][j] != ' ')

注意:这可能不是您唯一的错误,但它是我注意到的最明显和最严重的错误。


推荐阅读