旋转从魔方消失的瓷砖

时间:2019-07-15 03:18:53

标签: java rotation rubiks-cube

我正在处理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];

}
}

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

如果您的方形类实现Cloneable,则应尽可能使用 clone()方法,该方法也类似于@Nguyen Tan Bao的答案,但要短一些 我猜你是C ++开发人员,Java中的引用就像C ++中的指针一样,您可以研究更多开心!