Java阵列环绕

时间:2017-04-25 20:58:37

标签: java arrays wrapping

您好我想知道如何包装数组

例如取下面的数组:

|00  01  02  03  04  05  06  07|

说我想把一切都搞好,以达到这个目的:

|07  00  01  02  03  04  05  06|

如何在不丢失任何数据的情况下执行此操作?

向右移动我正在使用此代码:

public void transform(IFrame frame) {

    char tempImage;

    for (int i = 0; i < frame.getNumRows(); i++) {
        for (int j = 0; j < frame.getNumRows(); j++) {

            tempImage = frame.getChar(i,j);

            frame.setChar(i+1, j, tempImage);
}

基本上我希望代码用非常基本的术语来做:

  • 遍历每一行/列(frame.getNumRows,因为框架是方形的,行/列是相同的

  • 从框架中获取i和j的char值

- 使用该帧,将i和j的帧char值设置为i + 1,同时保持j相同

- 要设置的字符是临时图像

更新

我已经实现了这个方法,并将其从之前发布的方法更改,下面是更新后的代码:

public void transform(IFrame frame) {

        char constantImage;

        for (int i = 0; i < frame.getNumRows(); i++) { //go through each row/column
            for (int j = 0; j < frame.getNumRows(); j++) {

                constantImage = frame.getChar(i, j);

                TransformFrames.add(constantImage);

                Collections.rotate(Arrays.asList(TransformFrames), 1);


                for (Character f : TransformFrames) {
                    frame.setChar(i, j, f);
                }
            }
        }
    } 

TransformFrames是一个字符数组列表。

通过调试我可以看到正确的数据被添加到数组列表中,我希望被移动但是我无法看到这种情况发生,因为一旦调用此方法gui没有更新 - 任何建议为什么或怎么修??

谢谢

3 个答案:

答案 0 :(得分:2)

一种简单的方法是Collections.rotate

Collections.rotate(Arrays.asList(array), 1);

答案 1 :(得分:1)

我相信,一个众所周知的解决方案就是:

你有

|00  01  02  03  04  05  06  07|

再次将相同的数组添加到结尾:

|00  01  02  03  04  05  06  07 00  01  02  03  04  05  06  07|

现在,围绕索引i的数组只是这个新数组的子数组,从索引i开始,并且与初始数组的长度相同:

01  02  03  04  05  06  07 00

02  03  04  05  06  07 00  01

03  04  05  06  07 00  01  02

答案 2 :(得分:0)

首先,这可能是“XY问题”。你有一些问题要解决,你没有告诉我们什么,你你需要做什么来解决你的问题是旋转一个数组,(是的,旋转是用于此的术语,)你问我们如何旋转数组。 (参见:http://xyproblem.info)换句话说,你要求我们解决一些“X”问题,而事实上你要解决的是它之前出现的一些“Y”问题,所以它会有益所有参与者都要告诉我们“Y”问题。但是,让我们继续讨论这个问题。

覆盖要移动的元素的问题是一个众所周知的问题,有一个众所周知的解决方案:

  • 如果要向左旋转,请从左到右复制元素,即升序

  • 如果要向右旋转,请从右向左复制元素,即降序

这就是它的全部内容。

然后当然,在java中,有System.arrayCopy(),它可以为你做到这一点,而不必重新发明轮子。