您好我想知道如何包装数组
例如取下面的数组:
|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没有更新 - 任何建议为什么或怎么修??
谢谢
答案 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()
,它可以为你做到这一点,而不必重新发明轮子。