由n元素旋转的Java数组在测试中给出错误的输出

时间:2019-01-12 09:25:57

标签: java arrays rotation

我在尝试解决问题时遇到了问题。这是任务:

编写一个可移动列表的程序,该程序将列表旋转几次(第一个元素变为最后一个)。

list = 1,2,3,4,5 and N = 2 -> result = 3,4,5,1,2

请注意,N可能大于列表的长度,在这种情况下,您将列表旋转几次。

list = 1,2,3,4,5 and N = 6 -> result = 2,3,4,5,1

输入 在第一行,您将收到数字列表。 在第二行,您将收到N

输出 在输出的仅一行上,打印用空格分隔的数字。

这是测试:

  

测试1:

     

输入5,3,2,1 2

     

输出2、1、5、3

     

测试2:

     

输入2,1、3、4 5

     

输出1,3,4,2

到目前为止,这是我的代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();

        String[] elements = input.split(",");
        int[] array = new int[elements.length];

        for (int i = 0; i < elements.length; i++) {
            array[i] = Integer.parseInt(elements[i]);
        }

        int a = scanner.nextInt();


        int[] rotated = new int[elements.length];


        for (int x = 0; x <= array.length - 1; x++) {
            rotated[(x + a) % array.length] = array[x];
        }


        for (int i = 0; i < rotated.length; i++) {

            if (i > 0) {
                System.out.print(",");
            }
            System.out.print(rotated[i]);


        }
    }
}

第一个测试通过。但是第二项测试没有通过,我的程序给了我错误的输出:4,2,1,3,而不是正确的输出:1,3,4,2。

我不知道问题出在哪里。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的逻辑可以简化为:

public static void shiftLeft(int shiftBy, int arr[]) {
    for (int j = 0; j < shiftBy; j++) {
        int a = arr[0];                         // storing the first index
        int i;
        for (i = 0; i < arr.length - 1; i++) {  // shifting the array left
            arr[i] = arr[i + 1];
        }
        arr[i] = a;                             // placing first index at the end
    }
}

现在叫它:

public static void main(String[] args) {
    //  Fetch all data from user as you have done

    int arr[] = { 1, 2, 3, 4, 5 };
    shiftLeft(n % arr.length, arr);

    // print out the array
}

请注意,如果数字n大于数组的 length ,则不必实际进行多次移位。相反,您只需将其移动n % arr.length次。