我正在向右移动一个数组,但是当我这样做时,我错过了原始数组[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]
我看过别人,他们似乎没有帮助解决这个问题。我是否也必须为第一个元素制作占位符?或者不是?
答案 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
将环绕到零位置。因此,我们不需要任何空间边缘情况来覆盖第一个/最后一个替换。