将数组移到左侧

时间:2017-09-03 09:42:15

标签: java arrays int

所以我试图将数组向左移动,例如,如果原始数组是' 1,2,3,4',则转换后的数组会变为' 2 ,3,4,1',这是我到目前为止,我一直得到一个丢失的返回语句错误,我将如何修复它?

public int shift  ( int [] d){

    for(int from =1; from <= d.length-1; from++)
        d[from-1]= d[from];

       System.out.println ("d[from]"+",d[0]");
    }

5 个答案:

答案 0 :(得分:0)

public static void shift(int[] arr, int offs) {
    // e.g. arr = 1,2,3,4,5,6,7,8,9; offs = 3
    offs %= arr.length;
    offs = offs < 0 ? arr.length + offs : offs;

    if (offs > 0) {
        // reverse whole array (arr = 9,8,7,6,5,4,3,2,1)
        for (int i = 0, j = arr.length - 1; i < j; i++, j--)
            swap(arr, i, j);
        // reverse left part (arr = 7,8,9,6,5,4,3,2,1)
        for (int i = 0, j = offs - 1; i < j; i++, j--)
            swap(arr, i, j);
        // reverse right part (arr = 7,8,9,1,2,3,4,5,6)
        for (int i = offs, j = arr.length - 1; i < j; i++, j--)
            swap(arr, i, j);
    }
}

private static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

答案 1 :(得分:0)

您的逻辑是正确的,但您只需在代码中进行一些修改。

int data[]={1,2,3,4};

shift(data); 

//print out Shifted Array
for(int n : data){
    System.out.println(n);
}

   public void shift(int[] d){
        int f=d[0]; // Store first index

        int from=1;
        for(;from<d.length;from++){
            d[from-1]=d[from];
        }       

        d[from-1]=f; //set first index to the last index 
    }
  

您不需要返回任何数据,因为java传递了引用   对象不值。

答案 2 :(得分:0)

使用Collections.rotate

public List<Integer> shift(int [] d) {
  List<Integer> intList = new ArrayList<Integer>();

  for (int index = 0; index < d.length; index++) {
    intList.add(d[index]);
  }

  Collections.rotate(intList, -1);
  return intList;
}

答案 3 :(得分:0)

以下代码是PHP中的代码,用于根据给定的转换号将数组向左移动。

 <?php
    $a = [2,3,4,5,6];
    $k1 = 2;
    $k2 = 10;

    function leftshift($ar, $n , $k){
        $mod = $k % $n;

        for ($i = 0; $i < $n; $i++) {
            echo ($ar[($mod +  $i) % $n]) , " "; 
            echo "\n";
        }
    }

    $n = count($a);
    leftshift($a,$n,$k1);
    leftshift($a,$n,$k2); 
    ?>

答案 4 :(得分:-1)

public int shift (int[] d) {

    for(int from =1; from <= d.length-1; from++)
        d[from-1]= d[from];

    System.out.println ("d[from]"+",d[0]");
    return d.length=0?0:d[0];
}

请注意,数组的大小可能为零,您可能会得到“索引超出范围的异常”。