2016-12-29 12 views
-4

配列の要素をAndroid Java上の特定の位置に移動する方法。 あなただけ移動したい場合我々は配列の要素を特定の位置に移動

int oldPosition, int newPosition 

JSONObjects

+0

使用の一時変数は、現在の値を格納し、一時変数に古い位置の値を動かし、古い位置に新しい位置値を移動し、最終的に新しい位置に一時値を移動する場合は、このコードは動作します。 –

+0

ようこそ、あなたがこの問題について何度か取ってきたことを示すようにしたコードを入力してください。もちろん、類似の質問を最初に検索する必要があります。これは単純なアルゴリズムの問​​題です。 – AxelH

答えて

0

のいくつかのような

JSONObject[] tmp = new JSONObject[999]; 

配列を持っている tmp[newPosition]=tmp[oldPosition];

スワップ

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

0

EDIT:あり、他の方法がありますが、あなたの結果を得るためにも、この通過することができます:)

練習:あなたはこのロジックを理解し、JSONObjectタイプを使用して行うことができます>private int array[];

- 必要な変更は、

はあなたがint配列を持っているとしましょう、私はそれを行うことが怠惰だすべてを処理、NullPointerExceptionsに気をつけろ

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、]


しかし、それはあなたを満たしていません?

このようになるように入れて必要[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はsomethindを強制実行します;))。しかし、配列をあるインデックスから別のインデックスにシフトするには、ループを使ってswapNumbersと同じ種類のロジックを使用して値をシフトする方が簡単です。 – AxelH

+0

@AxelH;)次回はこのことを覚えておいてください。これは私の心に来て、投稿しました。あなたからの良い点。ありがとうございます! –

+0

私は単純な解決策のためにalgoを書いています。リストの代わりに同じ配列を使用しています。 – AxelH

0

は、2つの単純なアルゴリズムです、お楽しみください。

スイッチ値:

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

これは単にインデックスfrom

で開催するインデックスtoで置き換えされる値を格納します

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

のようなものを与えます移動とシフトの値:

これは1つの値を移動し、次に値をシフトします。このため

[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; 
関連する問題