我得到了一些整数,我希望为了这个数组的最后一个元素将在N次上移位,就像这样:
int[] array = {1, 2, 3, 4, 5};
现在,最后一个元素将被移位3次,应该是预期的结果:
3, 4, 5, 1, 2
我试过这样:
int[] tab = new int[5];
tab[0] = 1;
tab[1] = 2;
tab[2] = 4;
tab[3] = 5;
tab[4] = 6;
int[] secondTab = new int[5];
int N = 3;
int j = 0;
for (int i=0; i<tab.length-1; i++){
secondTab[i] = tab[(tab.length-1)-N];
N--;
if (secondTab[i+1]==0){
secondTab[i+1] = tab[j];
}
}
这显然是错误的代码,j根本没有增加,所以它只适用于这个例子,但我想知道最好的方法是什么?
答案 0 :(得分:3)
如果您想向右移N
次,则意味着i
位置的元素将位于(i+N)%tab.lenth
位置:
for (int i = 0; i < tab.length; i++) {
secondTab[(i+N)%tab.length] = tab[i];
}
答案 1 :(得分:0)
如果要移动原始数组中的元素,可以尝试这样的方法:
int[] array = {1, 2, 3, 4, 5};
int nbShift = 1; // the number of desired shift
for(int i = -1; i < nbShift; i++){
int f = array[0];
for(int j = 0; j < array.length -1 ; j++){
array[j] = array[j + 1];
}
array[array.length - 1] = f;
}
答案 2 :(得分:0)
public static void main(String[] args) {
final int[] test = { 1, 2, 3, 4 };
shiftNTimes(test, 2);
for (final int i : test) {
System.out.println(i);
}
}
public static void shiftNTimes(int[] array, int numShifts) {
int timesShifted = 0;
while (timesShifted < numShifts) {
final int temp = array[0];
for (int i = 0; i < (array.length - 1); i++) {
array[i] = array[i + 1];
}
array[array.length - 1] = temp;
timesShifted++;
}
}