Java与遍历循环

Java与遍历循环,java,arrays,traversal,Java,Arrays,Traversal,这个问题与我之前关于如何遍历多维数组的文章有些关联 编辑:我已经添加了三张我希望立方体重新排列的图片。第一幅图显示一个2x2x2立方体,数字设置在其默认位置。第二幅图显示了同一个立方体,第一列逆时针旋转。第三幅图显示了Z、X和Y轴 编辑2:我已经更改了值。 编辑1:根据我可以用纸和笔估计的结果,我有以下循环迭代。在这种情况下,它将是上面立方体中的数字0、2、4和6。这些是Z、X和Y值,应从中获取数字: z x y 0 0 0 0 1 0 1 0 0 1 1 0 编辑2:

这个问题与我之前关于如何遍历多维数组的文章有些关联

编辑:我已经添加了三张我希望立方体重新排列的图片。第一幅图显示一个2x2x2立方体,数字设置在其默认位置。第二幅图显示了同一个立方体,第一列逆时针旋转。第三幅图显示了Z、X和Y轴

编辑2:我已经更改了值。 编辑1:根据我可以用纸和笔估计的结果,我有以下循环迭代。在这种情况下,它将是上面立方体中的数字0、2、4和6。这些是Z、X和Y值,应从中获取数字:

z  x  y
0  0  0
0  1  0
1  0  0
1  1  0
编辑2:我已经更改了值,并将旧的z替换为zz,将旧的x替换为xx。这是需要的,因为一侧(容器)必须使用z值,而另一侧(容器temp)需要zz值(z值相反)。 编辑1:数字0、2、4和6应放置在以下位置,就像它们取自上述位置一样:

zz xx  y
 1  0  0
 0  0  0
 1  1  0
 0  1  0
编辑2:这意味着位置0(z x y)处的值0将移动到位置1 0(zz x y)处值4的位置

注:我知道在3D矩阵中,Z、X和Y位置通常不是这样使用的,这可能就是为什么解决这个问题比较困难的原因。我已经完成了立方体每个部分的旋转和翻转,所以我不觉得我现在应该改变代码的工作方式(当然,如果我像个白痴一样思考的话,我愿意接受魔兽世界的推荐)。我只是想在矩阵操作方面做得更好,因为即使在我的职业生涯中,我也从来没有坐过这种东西

解决:我在我的项目中使用了以下代码。但是,该代码不适用于2x3x2分组。所以我想这个解决方案应该只用于大小相等的立方体。我将研究它,但它是不需要我的项目到目前为止。如果有人想知道更好的方法,请告诉我,因为我想了解更多

for (int y = 0; y < yDim; y++) {
    for (int z = 0; z < zDim; z++) {
        for (int x = 0, zz = xDim - 1, xx = z; x < xDim; x++, zz--) {
            System.out.println("["+zz+"]["+xx+"]["+y+"] = ["+z+"]["+x+"]["+y+"]");
            containerTemp[zz][xx][y] = container[z][x][y];
        }
    }
}
for(int y=0;y
这样想吧-每次你转动一个魔方,你转动一个魔方的一片,实际上是一个二维数组,你知道如何求解

因此,每转一圈你都需要:

  • 了解您需要的正确二维数组是什么(我猜它将使用固定值
    x
    y
    z
    ,例如-
    y=2
    将在
    z
    上定义一个
    x
    的二维数组,其中所有
    y
    值都是
    2
  • 应用你已经拥有的算法
  • 将结果复制到原始三维阵列
  • 因此,对于
    y=2
    的情况,它类似于(伪代码):

    //从多维数据集数组定义二维数组(“切片”)
    对于(i=0;i

    当然,您必须注意每个轴索引的迭代从何处开始,以及是否增加或减少等,但这是主要的想法。

    可能只是我缺乏理解,但我不太明白这个问题。你有第一个数组,你想用代码得到第二个吗?还是我根本就没有得到?@Or251:我希望在遍历数组时重新排列所有值。想象一下,你看着魔方的一面,将一面/柱顺时针/逆时针旋转90度。我有一个代码,可以顺时针/逆时针旋转正常的X X X Y网格的值,但在我将Z轴添加到混合中时没有。假设立方体上的值写在你面对的一侧,这些值应该按照你看到它们在转动时移动的顺序重新排列。如果我实现了这样的东西,我想,如果我做对了,你可以有6个二维数组,代表魔方,您可以操纵这6个立方体面,而不是实现三维。这只是一个建议,但对我来说更容易。如果你很难实现我建议的方法,让我知道:)@Or251:当我开始旋转和翻转X×Y网格(顺时针/逆时针)时,我宁愿不要从头开始。这列东西不是必需的,我只是想看看我是否可以让它像我做的X和Y旋转一样工作。另外,我不明白你对6个2d阵列的意思。这将如何使它更容易。。。
    // defining the two-dimensional array (the "slice") from the cube-array
    for (i = 0; i < N; i++) {
        for (k = 0; k < N; k++) {
            arr[i,k] = origArr[i,2,k]
        }
    }
    
    // turning the two-dimensional array with the function we already have
    turnedArr = turn(arr)
    
    // copying the resulted two-dimensional array back to the cube
    for (i = 0; i < N; i++) {
        for (k = 0; k < N; k++) {
            origArr[i,2,k] = turnedArr[i,k]
        }
    }