java - 获取代表笛卡尔 x,y 的值列表

标签 java arrays random

对于我的家庭作业,我正在像康威的生命游戏一样在网格上制作捕食者/猎物。它看起来不错,但在某一点上很粗糙。

很多时候,我需要从当前单元格中随机选择一个相邻单元格并执行某些操作,然后循环浏览其他三个单元格(我只使用侧单元格,而不是对角线。网格上的当前单元格我们可以看涨期权位置 x=0 且 y=0)。

如果我总是从 (-1,0) 这样的一个地方开始,然后遍历 (0,1)(+1,0)(0,-1),那么进行循环是没有问题的。但这不是一个随机的起点。

我可以使用 math.random() 为 x 和 y 获取随机起始单元格。

令我烦恼的是,当我事先不知道将是随机开始的单元格时,定义循环中下一个单元格的 x,y 的智能方式。我可以通过使用 if(x==1 && y==0) then 三行在其他三个单元格中执行任务来进行暴力操作。然后是 if(x==0 && y=1) 和另外三行。但对于四种可能的开始,每一种都是三行。看起来很粗糙。

我想也许我可以描述 8 个成员数组中所有四个单元格的 x,y:x 顶部、y 顶部、x 右侧、y 右侧...)。然后生成一个随机数来选择“起点”并遍历。最后成员循环回到数组的开头,直到读出四对 x,y。

在编写和排除故障之前,是否有更聪明的方法?如果有几个想法,我会尝试为实践编写每个想法。

我还可以使用一些指导来指导我如何在搜索中表达这个问题。

非常感谢。

最佳答案

听起来您想处理相邻单元格的随机循环排列。您可以通过一级间接索引来完成此操作。例如,您可以通过数组定义相邻单元格的索引

int[] adjacent = {0, 1, 2, 3};

然后,您希望从相邻的随机位置开始,按顺序处理四个元素,如果超出了末尾,则返回到开头。您可以通过使用模运算符 (%) 或将数组加倍来处理此问题:

int[] adjacent = {0, 1, 2, 3, 0, 1, 2, 3};
int randomStart = rand.nextInt(4); // rand is an instance of Random
for (int i = 0; i < 4; ++i) {
    processNeighbor(adjacent[randomStart + i]);
}

这将以下列可能性之一处理邻居,随机选择:

  • 0、1、2、3
  • 1、2、3、0
  • 2、3、0、1
  • 3,0,1,2

关于java - 获取代表笛卡尔 x,y 的值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078483/

相关文章:

c - rand() 在我的自定义函数中不返回任何值

java - 如果它包含美元符号 (${var}),则无法读取属性

java - Spring `SavedRequest` 是否包含任何清理逻辑以避免重定向循环或类似循环?

java - 使用 .NET Web 服务时将 ArrayOfStrings 转换为 JAVA 中的 String[]

用于树数据结构的无序集的 Python 单元测试

Javascript : Exclude an element from a random set - (curiosity)

java - JAXB:我应该如何编码复杂的嵌套数据结构?

java - SQL 查询不会执行 SQLite,Java

python - 如何获得信号最大幅度 10% 时的 (x, y) 坐标?

java - 返回错误的百分比