Java函数采用整数输入n,并将数组旋转n个空格

时间:2019-02-15 08:42:48

标签: java arrays rotation

我是Java的新手,所以如果我听起来不知道自己在做什么并且我的代码很粗糙,那么您就必须忍受我

我的目标是获取用户的输入,并根据其整数输入将数组旋转多少次。刚开始,我试图使数组反转以查看其移位,但是我的函数中有一些错误让我无法编译。

编辑:我知道我使用列表而不是使用arr。我在看一个例子,无意中输入了

这是我的代码:

import java.util.Scanner;

public class Project1P2 {
    public static void main(String[] args) { 
        int[] arr1 = {2,4,6,8,10,12};
        int[] arr2 = shift(arr1);

        Scanner input = new Scanner (System.in);
        System.out.print("Here is the Array: " + arr1);
        System.out.println("Enter a number to shift array: ");
        int n = input.nextInt();
    }

    public static int[] shift(int[] arr)
    {
        int[] arrShiftDone = new int[list.length];
        for (int i = 0, j = arrShiftDone.length - 1; i < list.length; i++, j--)
        {
            arrShiftDone[j] = list[i];
        }
        return arrShiftDone;
    }       
} 

4 个答案:

答案 0 :(得分:0)

您的错误是您在使用list的班次方法中应该使用arr。我已经在下面更新了。我还包括了shift方法。 已编辑为包括负移。

    public static void main(String[] args) {

        int[] arr1 = { 2, 4, 6, 8, 10, 12 };
        int[] arr2 = reverseArray(arr1);

        Scanner input = new Scanner(System.in);
        System.out.println("Here is the Array: " + Arrays.toString(arr1));
        System.out.print("Enter a number to shift array: ");
        int n = input.nextInt();
        int[] arr3 = shiftArray(arr1, n);
        System.out.println("Here is the shifted Array: " + Arrays.toString(arr3));

    }

    public static int[] reverseArray(int[] arr) {
        int[] arrShiftDone = new int[arr.length];
        for (int i = 0, j = arrShiftDone.length - 1; i < arr.length; i++, j--) {
            arrShiftDone[j] = arr[i];
        }
        return arrShiftDone;
    }

public static int[] shiftArray(int[] arr, int shift) {
        int[] arrShiftDone = new int[arr.length];
        shift = shift % arr.length;
        if (shift < 0) {
            shift = arr.length + shift;
        }
        for (int i = 0 + shift, j = 0; j < arr.length; i++, j++) {
            if (i >= arr.length) {
                arrShiftDone[j] = arr[i - arr.length];
            } else {
                arrShiftDone[j] = arr[i];
            }
        }
        return arrShiftDone;
    }

答案 1 :(得分:0)

您需要修复几件事:

  1. shift方法永远不会从main方法中调用,这意味着它不会对数组做任何事情
  2. shift方法应包含另一个要移动的位数的参数,例如n
  3. shift方法中,您使用的是list,而参数声明为arr

下面是移动数组的示例方法:

public static int[] shift(int[] arr, int n) {
    if(n > arr.length) 
        n = n%arr.length;

    int[] result = new int[arr.length];

    for(int i=0; i < n; i++){
        result[i] = arr[arr.length-n+i];
    }

    int j=0;
    for(int i=n; i<arr.length; i++){
        result[i] = arr[j];
        j++;
    }

    return result;
}

答案 2 :(得分:0)

编译错误是因为变量arr未知。应该在方法list中使用参数shift(int[] arr)而不是{{1}}。

答案 3 :(得分:0)

您可以使用 Arrays.stream(int[],int,int) 方法两次获得具有指定数组范围的两个流:nearfar,然后交换它们和 {{3 }} 回到一个流中,从而得到一个移位数组:

```{bash echo=FALSE, comment=""}
echo "![$name]($dir/$file)";
```
public static int[] shiftArray(int[] arr, int n) {
    return IntStream
            .concat(Arrays.stream(arr, n, arr.length),
                    Arrays.stream(arr, 0, n))
            .toArray();
}

输出:

public static void main(String[] args) {
    int[] arr1 = {2, 4, 6, 8, 10, 12};

    System.out.println("Source array: " + Arrays.toString(arr1));
    System.out.println("Enter a number: ");

    Scanner input = new Scanner(System.in);
    int n = input.nextInt();

    int[] arr2 = shiftArray(arr1, n % arr1.length);
    System.out.println("Shifted array: " + Arrays.toString(arr2));
}

另见:concat