【问题标题】:Searching a Dictionary搜索字典
【发布时间】:2015-04-02 09:36:29
【问题描述】:

我一直在努力提高我的 Java 技能,并决定创建一个 Noughts and Crosses 游戏。我正在尝试实现获胜条件,因此游戏可以判断“ai”或人类是否获胜,并结束游戏。

数据作为键值对存储在 HashMap 中。整数是位置,字符串是它包含的内容。该字符串将为"""O""X"

表示位置的整数:

1 2 3
4 5 6
7 8 9

显示数据库初始化的代码:

Map<Integer, String> database = new HashMap<Integer, String>();

无论如何,我正在尝试找出在这本词典中搜索的最佳方法,检查以下任何获胜条件:

  • 位置 1、2、3 中的 3 个“O”或“X”字符串
  • 3 个“O”或“X”字符串在位置 4、5、6
  • 3 个“O”或“X”字符串在位置 7、8、9
  • 位置 1、4、7 中的 3 个“O”或“X”字符串
  • 位置 2、5、8 中的 3 个“O”或“X”字符串
  • 3、6、9 位置的 3 个 "O" 或 "X" 字符串
  • 位置 1、5、9 中的 3 个“O”或“X”字符串
  • 3、5、7 位上的 3 个 "O" 或 "X" 字符串

我是否必须做一个大型的嵌套 if 语句或案例集,或者有什么方法可以更有效地循环这些?

【问题讨论】:

  • 这不是Noughts和十字架吗?
  • 更新了正确的拼写,干杯。
  • 您希望它的效率如何?你的性能要求是什么?你真的认为这对 9 个项目很重要吗?你试过什么?很慢吗?
  • Map 是一个相当奇怪的选择,但无论如何它都会起作用。您可以将所有获胜组合存储为 3 个数字,就像您已经拥有的一样,然后遍历它们,检查索引中的所有三个值是否匹配。然后通过检查任何这些值来确定谁赢了。我建议创建一个 checkWin(int[] indexes) 方法,该方法将检查所有 3 个索引并在它们是否匹配时返回真/假。
  • 您还可以为板上的所有字段赋值。如果 X,则为 1,如果 O,则为 -1,如果为空,则为 0。然后在每转一圈后,计算行、列和对角线上的值,看看是否有-3或+3的值。

标签: java for-loop dictionary hashmap


【解决方案1】:

地图是一个相当奇怪的选择,但无论如何它都会起作用。您可以将所有获胜组合存储为 3 个数字,就像您已经拥有的一样,然后遍历它们,检查索引中的所有三个值是否匹配。然后通过检查任何这些值来确定谁赢了。

我建议创建一个checkWin(int[] indexes) 方法,该方法将检查所有 3 个索引并在它们是否匹配时返回真/假。然后遍历所有预先制作的获胜组合以检查是否获胜。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2019-08-02
    • 2017-10-02
    • 1970-01-01
    • 2011-07-07
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多