如何将数组1中的元素移位?

时间:2017-01-10 03:59:50

标签: java

我想将此数组中的所有元素移位1:[1 4 9 16 25],其中最后一个元素(25)成为第一个元素。我的问题是我一直把阵列打印出来[25 1 1 1 1],我该如何解决这个问题?

import java.util.Arrays;

public class question4 {
public static void main(String[] args){
    int[] array = new int[5];
    array[0] = 1;
    array[1] = 4;
    array[2] = 9;
    array[3] = 16;
    array[4] = 25;
    ShiftNumbers(array);
    System.out.print(Arrays.toString(array));
}
public static void ShiftNumbers(int[] array){
    int temp = array[array.length-1];
    for(int i=0; i<=array.length-2; i++){
        array[i+1]=array[i];
    }
    array[0] = temp;        



}

}

5 个答案:

答案 0 :(得分:1)

根据Sotirios Delimanolis的评论更新了答案以提供完整的解决方案,而不仅仅是指导。

使用System.arrayCopy,您可以通过3个步骤轻松完成。

public static int[] revisedShiftNumbers(int[] array) {
    int[] newArr = new int[array.length];
    System.arraycopy(array, 0, newArr, 1, array.length - 1);
    newArr[0]=array[array.length-1];
    return newArr;
}

然后将此方法称为int[] shiftedArray = revisedShiftNumbers(array);

该方法有五个参数:

  1. src:源数组。
  2. srcPosition:您希望从哪里开始的位置 复制。
  3. des:目标数组。
  4. desPosition:目标数组中复制位置的位置 应该开始。
  5. length:要复制的元素数。

答案 1 :(得分:0)

你的问题是当你从数组的开头循环时它将覆盖所有其余值,我建议在覆盖数组值时从数组的末尾到数组的开头。 试试这个:

import java.util.Arrays;

public class question4 {
public static void main(String[] args){
    int[] array = new int[5];
    array[0] = 1;
    array[1] = 4;
    array[2] = 9;
    array[3] = 16;
    array[4] = 25;
    ShiftNumbers(array);
    System.out.print(Arrays.toString(array));
}
public static void ShiftNumbers(int[] array){
    int temp = array[array.length-1];
    for(int i=array.length-2; i>=0; i--){
        array[i+1]=array[i];
    }
    array[0] = temp;        

}
}

答案 2 :(得分:0)

您的代码中的问题是在for loop内部,您使用当前值覆盖下一个值,该值为25 1 1 1 1。由于所有其他值都丢失(覆盖)。

现在我的方法是使用模运算来解决这个特殊问题。

import java.util.Arrays;

public class question4 {

    public static void main(String[] args){
        int[] array = {1, 4, 9, 16, 25};
        ShiftNumbers(array);
        System.out.print(Arrays.toString(array));
    }

    public static void ShiftNumbers(int[] array){

        int last = array[0];
        int temp;
        int length = array.length;

        for(int i = 0; i < array.length; i++){

             temp = array[(i+1)%length];
             array[(i+1)%length] = last;
             last = temp;

        }
        array[0] = temp;        

    }
}

答案 3 :(得分:0)

其他解决方案。使用linkedList。 : - )

public class ShiftSimple {
    private static int mTestCnt = 0;
    public static void main(String[] args) {
        int[] array = new int[5];
        array[0] = 1;
        array[1] = 4;
        array[2] = 9;
        array[3] = 16;
        array[4] = 25;

        shiftNumbers(array);
        printNumbers(array);

        shiftNumbers(array);
        printNumbers(array);

        shiftNumbers(array);
        printNumbers(array);
    }

    public static void shiftNumbers(int[] array) {
        LinkedList<Integer> linkedList = new LinkedList<Integer>();
        for(int item : array) {
            linkedList.add(item);
        }
        linkedList.push(linkedList.pollLast());     // shift last to first

        int i = 0;
        for(int item : linkedList) {
            array[i++] = item;
        }
    }

    public static void printNumbers(int[] array) {
        System.out.println("["+ ++mTestCnt +"] Check Numbers");
        for(int i : array) {
            System.out.println(">> " + i);
        }
    }
}

<强> [OUTPUT]

[1] Check Numbers
>> 25
>> 1
>> 4
>> 9
>> 16
[2] Check Numbers
>> 16
>> 25
>> 1
>> 4
>> 9
[3] Check Numbers
>> 9
>> 16
>> 25
>> 1
>> 4

答案 4 :(得分:0)

试一下

public static void main(String[] args) {
    int[] array = new int[5];
    array[0] = 1;
    array[1] = 4;
    array[2] = 9;
    array[3] = 16;
    array[4] = 25;

    ReverseArray(array);
    System.out.print(Arrays.toString(array));
}

public static void ReverseArray(int[] a) {
    int size, i, j, temp;
    size = a.length;

    for( i=0; i<size; i++)
    {
         a[i] = a[i];
    }

   j = i - 1;     // now j will point to the last element
   i = 0;         // and i will point to the first element

   while(i<j)
   {
       temp = a[i];
       a[i] = a[j];
       a[j] = temp;
       i++;
       j--;
   }

   System.out.print("\n Now the Reverse of Array is : \n");
   for(i=0; i<size; i++)
   {
       System.out.print(a[i]+ "  ");
   }
}