2016-12-29 132 views
-4

如何將數組的元素移動到Android JAVA上的特定位置。 我們有將陣列的元素移動到指定的位置

int oldPosition, int newPosition 

有的像

JSONObject[] tmp = new JSONObject[999]; 

陣列的JSONObjects

+0

使用臨時變量來存儲當前值和移動的老位置值的臨時變量,然後,在新的位置值移動到老位置終於移到臨時值到新的位置。 –

+0

歡迎,請提供您試圖向我們展示您在此問題上花費一些時間的代碼。當然,你應該首先搜索類似的問題,這是一個簡單的算法問題。 – AxelH

回答

0

如果你只想移動 tmp[newPosition]=tmp[oldPosition];

交換

JSONObject jo= tmp[oldPosition]; tmp[oldPosition]=tmp[newPosition]; tmp[newPosition]=jo;

0

編輯:還有其他的方法,但你可以通過這個問題,以及讓您的結果:)

練習:你能理解這個邏輯,並使用JSONObject型和做需要更改,小心NullPointerExceptions,處理一切我懶做他們

比方說你有int數組 - >private int array[];

array = new int[]{10,20,30,40,50,60,70,80,90,100}; 

電話,如果你想交換元素這種方法,

swapNumbers(array,9,1); 

public int[] swapNumbers(int [] arr, int possition1, int possition2){ 
    int temp = arr[possition2]; 
    arr[possition2] = arr[possition1]; 
    arr[possition1] = temp; 
    System.out.println("array -->" + Arrays.toString(array)); 
    return arr; 
} 

出放:陣列[10,,30,40,50,60,70,80,90,20 ]


但不滿足你?

需要出放是這樣:陣列[10,,20,30,40,50,60,70,80,90]

則可以使用下面的方法

resetUpMyArray(array, array[9],1); 
System.out.println("array Finally changed-->" + Arrays.toString(array)); 

享受,

public int[] resetUpMyArray(int[] inputArray, int deleteMeValue,int addMePosition) { 
      List resultLinkedList = new LinkedList(); 

      for (int itemValue : inputArray) 
       if (deleteMeValue == itemValue) { 
        System.out.println("Do not add this value"+itemValue); 
       } else { 
        System.out.println("Do add this value "+itemValue +"position-"+deleteMeValue); 
        resultLinkedList.add(itemValue); 
       } 

      System.out.println("array -as new L.L->" + resultLinkedList); 
      resultLinkedList.add(addMePosition,deleteMeValue); 
      System.out.println("array -as new L.L all set->" + resultLinkedList); 

      array = new int[resultLinkedList.size()]; 
      for (int i = 0; i < resultLinkedList.size(); i++) { 
       array[i] = (int) resultLinkedList.get(i); // Watch out for NullPointerExceptions! 
      } 

      return array; 
     } 
+1

你應該爲此提供一個僞代碼,這是更通用的(並強制OP做某事;))。但是更容易的解決方案是使用與swapNumbers相同的邏輯將數組從一個索引轉移到另一個索引,而使用循環也會使值更改。 – AxelH

+0

@AxelH;)是的,下一次生病時請牢記這一點。這件事出現在我的腦海裏,我貼出來。很高興指出你。謝謝! –

+0

我寫了簡單的解決方案的算法。它使用相同的數組而不是List。 – AxelH

0

下面是兩個簡單的算法。

開關值:

switch(array, from, to) 
    tmp   = array[to] 
    array[to] = array[from] 
    array[from] = tmp 

這將會給像

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
      |--<---->--| 
[10, 20, 60, 40, 50, 30, 70, 80, 90, 100] 

這將簡單地存儲,這將是該指數to在更換是在指數from

的地方的價值觀移動和移位值:

這一個將移動一個值,然後移動下一個值。

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
      |------------^ 
[10, 20, , 40, 50, 60, 30, 70, 80, 90, 100] 
      <----------- 
[10, 20, 40, 50, 60, 30, 70, 80, 90, 100] 

對於這一點,該解決方案是相當的相同,存儲值tmp但每個值轉移到填充間隙。此代碼將只工作,如果from < to

tmp = array[to]  
i = from 
while(i < to) 
    array[i] = array[i+1]; --Shift the value 
    i = i + 1  
array[to] = tmp;