创建一个需要从3个变量的中间向外循环的检查(x y z)

时间:2012-02-26 01:17:55

标签: java arrays for-loop minecraft

for (int ix = x - r; ix < x + r + 1; ix++) {
    for (int iz = z - r; iz < z + r + 1; iz++) {
        for (int iy = y - r; iy < y + r + 1; iy++) {
                       // if ix,iy,iz = something blah blah (this part isn't needed)
        }                           
    }
}

好的,现在问题就在这里。上面的当前代码获得x,y,z和r(范围)。它的工作是通过“立方体”引用,直到满足我设定的某个条件。问题在于它从立方体的外部开始,基本上从一个角落到另一个角落。

我正在寻找一种方法(我的数学/ java不喜欢我atm)从pos开始并从该pos向外循环(包括pos本身),直到它到达多维数据集的最外层。

因此,如果我们给出了所有假值,让我们使用x = 5,y = 5,z = 5,r = 2 代码应检查5,5,5 - 4,5,5 6,5,5 5,6,5 5,4,5等基本上从中心向外迭代每个东西。

该命令名为FindNearest,但从技术上讲,它的作用类似于FindFurthest atm。

我希望我提供了足够的细节,并且如果有人可以向我扔一些片段或工作代码,我会很高兴,因为这在过去一小时左右是令人沮丧的。如果在for循环中间检查或者像这样随机的东西,我不想要10,我正在寻找一种干净的方式来做这件事。

1 个答案:

答案 0 :(得分:3)

你可以通过这样的方式从中心迭代:

for (ix = x, xsign = 1, xstep = 1; 
     (ix >= x - r) && (ix <= x + r);
     ix += xsign * xstep, xsign = -xsign, xstep++)

所以ix为你的例子将从5到6到4到7等等。你可以像这样嵌套循环,你会得到你想要的东西,至少我是正确理解这个问题。