java - 判断set是否存在冲突

标签 java

我有一个包含 5 个条目的 Java HashMap。映射到每个条目的是一个对象,其中包含:

  • x 值
  • y 值
  • 长度
  • 方向(“水平”或“垂直”)

想象一下带有 10 x 10 棋盘的游戏战舰。每个条目中的 x/y 坐标对应于棋盘上船舶的左上角,并且长度和方向对应于从该点开始的船舶长度和方向,正如人们所期望的那样。

我正在尝试想出一种方法来撕裂这 5 艘船,并检查棋盘上是否存在任何“重叠的船”,即冲突。我不知道该怎么做。任何帮助将不胜感激。

最佳答案

一种方法是:

1) 为板上的每个单元格分配一个数字,1-100(或 0-99)。

2) 向 HashMap 中的内容添加一个方法,该方法返回所覆盖的唯一单元 ID 的列表。因此,如果 x == 1、y==1、长度 == 3、方向 == 水平,您将返回代表潜艇所在单元格的三个 1-100 值。

您将能够通过执行类似 rowNumber*10 + columnNumber 的操作来计算第一个唯一 ID。您可能需要根据您是基于 0 还是 1,或者您的范围是否同样基于 0 或 1 来调整它。从那里,如果是水平的,您只需为每个长度单位添加 1。或者,如果您的作品是垂直的,则为每个唯一 ID 添加 10。

3) 现在您可以拥有一个带有静态方法的碰撞检测器类,该类需要两部分。它可以调用您在步骤 2 中创建的方法,获取两个列表,如果有任何重叠,您会在两个列表中找到相同的数字。

我不知道这是否是最好的方法,但这是一种方法。

关于java - 判断set是否存在冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916220/

相关文章:

java - 访问 DialogPreference 中的小部件状态

java - 比较 List<String> 时是否有一种干净的方法来忽略大小写?

java - Java的HashMap会悄然溢出吗?

java - Minecraft 客户端的 SHA1 加密

java - Android - 在 SQLite 数据库中搜索数据的最快方法

java - 使用 Spring security 进行授权的教程

java - 如果它不是使用扫描仪的 int ,我怎样才能不允许用户输入?

java - Wicket:<body> 中模板化的 javascript?

java - 避免 vaadin grid 点击后自动水平滚动

java - JBoss 6.4 中类加载的顺序 : Is WEB-INF/classes or modules loaded first?