【问题标题】:Move element of array to specific position [duplicate]将数组元素移动到特定位置[重复]
【发布时间】:2017-05-13 12:13:32
【问题描述】:

如何将数组元素移动到 Android JAVA 上的特定位置。 我们有

int oldPosition, int newPosition

还有一些喜欢

JSONObject[] tmp = new JSONObject[999];

JSONObjects 的数组

【问题讨论】:

  • 使用 temp 变量存储当前值并将旧位置值移动到 temp 变量中,然后将新位置值移动到旧位置最后将 temp 值移动到新位置。
  • 欢迎,请提供您尝试向我们展示您在此问题上花费了一些时间的代码。当然,你应该先搜索类似的问题,这是一个简单的算法问题。

标签: java arrays


【解决方案1】:

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

交换

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

【讨论】:

    【解决方案2】:

    编辑:还有其他方法,但您也可以通过此方法获得结果 :)

    练习:你可以理解这个逻辑并使用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, 100, 30, 40, 50, 60, 70, 80, 90, 20]


    但这不满足你?

    你需要像这样输出:array[10, 100, 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;
            }
    

    【讨论】:

    • 您应该为此提供一个伪代码,这更通用(并强制 OP 做某事;))。但是有更简单的解决方案可以使用与 swapNumbers 相同的逻辑将数组从一个索引转移到另一个索引,并且循环也会转移值。
    • @AxelH ;) 是的,下次请记住这一点。我想到了这件事,我把它贴出来了。你的好点。谢谢!
    • 我已经为简单的解决方案编写了算法。它使用相同的数组而不是列表。
    【解决方案3】:

    这里有两个简单的算法。

    切换值:

    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 &lt; to 时有效

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

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2013-06-05
      • 2021-02-25
      • 2011-07-15
      • 1970-01-01
      • 2023-03-29
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多