簡體   English   中英

如何將數組 1 中的元素移位?

[英]How to shift elements in an array 1 over?

我想將這個數組中的所有元素移動 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;        



}

}

根據 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 : 要復制的元素數。

你的問題是當你從數組的開頭循環時,它會覆蓋所有其余的值,我建議在覆蓋數組值時從數組的末尾到數組的開頭。 嘗試這個:

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;        

}
}

您的代碼中的問題是在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;        

    }
}

其他解決方案。 使用鏈表。 :-)

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);
        }
    }
}

[輸出]

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

嘗試這個

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]+ "  ");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM