2017-09-03 103 views
-4

所以我试图向左移动一个数组,例如,如果原始数组是'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]"); 
    } 
+4

是的,那是因为你缺少一个return语句。 – shmosel

+1

“我不断收到缺少返回语句错误”,因为即使你的方法说它返回了一个int,你也不会返回任何东西。 – tkausl

+0

此外,您需要保留'd [0]'的初始值,因此您可以将其分配给最终数组的最后一个元素。而你的'println'可能不会打印你的意图。 –

回答

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

注意,数组大小可能为零,并且您可能会收到“索引越界异常”。

+2

您好,请介绍一下这部分内容吗? d.length = 0?0:d [0] – Melanie

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的合格 对象不是值的参考。

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