0

我正在研究一个 2x2 魔方,并且无法通过我的程序进行一侧旋转。立方体是一个二维的正方形数组。我只是想逆时针旋转 90 度。

这就是发生的事情 https://imgur.com/a/tlskNKY

我改变了颜色,所以我可以看到特定的方块以及它们是如何变化的。我尝试更改顺序,一次移动特定的部分,看看问题是否只是重叠的部分(没有这样的运气)。

//square class

public class square implements Comparable {
    int c;
    private Rectangle r;
    int xpos, ypos, width, height;

    public square(int a, int x, int y) {
        c = a;
        xpos = x;
        ypos = y;

        r = new Rectangle(xpos, ypos, 50, 50);

    }
    //some unused methods
}

//inside the cube class
public class cube{

square[] temp = new square[4]

square[][] sq= new square[6][4]
//two for loops make squares and fills the sq 2d array
//the result is in the imgur link

public void turnVc(){

    temp= sq[2];

    sq[2][0]=temp[1];

    sq[2][1]=temp[3];

    sq[2][2]=temp[2];

    sq[2][3]=temp[0];

}
}

我希望输出是逆时针旋转的原始图像。

4

2 回答 2

0

tmp 是一个指针,它指向与 sq[2] 指针相同的对象。这就是为什么当您更改 sq[2] 内容时,您也会更改 tmp。我想而不是分配“temp = sq [2];” 您应该执行以下操作:

temp = new square[4];
for (int i = 0; i < 4; i++) {
    temp[i] = sq[2][i];
}

编辑:我认为您可以做的一点改进是您不需要保存所有 sq[2] 数组,您只能保存第一项。我会这样做(tmp 现在是一个正方形,而不是一个数组):

tmp = sq[2][0];
sq[2][0] = sq[2][1];
sq[2][1] = sq[2][3];
sq[2][3] = sq[2][2];
sq[2][2] = tmp;
于 2019-07-15T03:58:03.543 回答
0

如果你的 square 类实现了 Cloneable,你应该尽可能使用clone()方法,它也类似于@Nguyen Tan Bao 的答案,但我猜你是 C++ 开发人员,Java 中的引用就像 C++ 中的指针,你可以研究玩得开心!

于 2019-07-15T04:12:53.400 回答