数组向右移动,但索引[0]消失了

时间:2017-01-13 05:37:33

标签: java arrays

我正在向右移动一个数组,但是当我这样做时,我错过了原始数组[0]。

int innerLastIndex = innerRotorClockWise.length - 1;

String innerOldLast = innerRotorClockWise[innerLastIndex]; 

for (int i = innerLastIndex; i != 0; i--) {

    //place a holder  for first and last. 

    innerRotorClockWise[i] = innerRotorClockWise[i-1];


    innerRotorClockWise[0] = innerOldLast;

输出:

原始

[#, G, N, U, A, H]

转移1

[H, H, G, N, U, A] 

转移2

[A, A, H, G, N, U]

我看过别人,他们似乎没有帮助解决这个问题。我是否也必须为第一个元素制作占位符?或者不是?

2 个答案:

答案 0 :(得分:3)

您似乎已在循环中放置以下语句:

innerRotorClockWise[0] = innerOldLast;

这会导致在第一次迭代中替换第0个元素。在第一个语句本身后关闭循环:

for (int i = innerLastIndex; i != 0; i--) {

     innerRotorClockWise[i] = innerRotorClockWise[i-1];

}
innerRotorClockWise[0] = innerOldLast;

以下代码适用于我:

    String[] innerRotorClockWise = new String[]{"#", "G", "N", "U", "A", "H"};
    int innerLastIndex = innerRotorClockWise.length - 1;

    String innerOldLast = innerRotorClockWise[innerLastIndex];

    for (int i = innerLastIndex; i != 0; i--) {


        innerRotorClockWise[i] = innerRotorClockWise[i - 1];

    }
    innerRotorClockWise[0] = innerOldLast;
    System.out.println(Arrays.toString(innerRotorClockWise));

答案 1 :(得分:0)

这是一个正常运作的实施:

int[] array = {1, 2, 3, 4, 5};
int previous = array[0];
for (int i=1; i <= array.length; i++) {
    int temp = array[i % array.length];
    array[i % array.length] = previous;
    previous = temp;
}

System.out.println(Arrays.toString(array));

<强>输出:

[5, 1, 2, 3, 4]

这里的关键点是我们存储的数字将被一个变量中的每个班次替换,该变量位于外部循环中。此前的值是替换的实际值。

这里还有一个mod技巧:

array[i % array.length] = previous;

这将使用前面的值替换数组的位置i。但是,循环运行直到数组的长度,此时i % array.length将环绕到零位置。因此,我们不需要任何空间边缘情况来覆盖第一个/最后一个替换。