Java 数组环绕

Java Array Wrap Around

嗨,我想知道如何包装数组

例如下面的数组:

|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);
}

本质上,我希望代码以非常基本的方式执行的操作是:

-对于该帧,将 i 和 j 的帧字符值设置为 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 没有更新 - 任何建议为什么或如何解决?

谢谢

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

你有

|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

等等

一个简单的方法是 Collections.rotate:

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

首先,这很可能是一个"XY Problem"。你有一些问题要解决,但你什么也没告诉我们,你认为为了解决你的问题你需要做的是旋转一个数组,(是的,rotating 是用于此的术语,)并且您在问我们如何旋转数组。 (参见:http://xyproblem.info)换句话说,你是要我们解决一些"X"问题,而实际上你要解决的是之前出现的"Y"问题,所以它将 "Y" 问题告诉我们对所有相关人员都是有益的。但是,让我们继续这个问题。

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

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

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

仅此而已。

然后当然,在 java 中,有 System.arrayCopy(),它会为您做到这一点,而无需您重新发明轮子。