如何将列表中最后一个元素的N次移位

时间:2016-05-03 14:25:32

标签: java arrays

我得到了一些整数,我希望为了这个数组的最后一个元素将在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根本没有增加,所以它只适用于这个例子,但我想知道最好的方法是什么?

3 个答案:

答案 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++;
    }
}

For details