由数组中的n个元素循环旋转

时间:2017-09-19 01:01:21

标签: java arrays algorithm

我的代码输出有问题,无法理解为什么我得到这个输出。问题是:“给定n个元素的数组和整数k,0

import java.util.Scanner;

public class ShiftingArrayElements{
    public static void main(String [] args) {
        int x = 0;
        int j=0;

        Scanner sc = new Scanner(System.in);

        String data = sc.nextLine();
        x = sc.nextInt();
        String tmpDataArray[] = data.split(" ");

        int dataArray[] = new int[tmpDataArray.length];
        for (int i = 0; i < dataArray.length; ++i) {
            dataArray[i] = Integer.parseInt(tmpDataArray[i]);   
        }

        if(x > dataArray.length) 
            x = x%dataArray.length;

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

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

        for(int i=x; i<dataArray.length; i++){
            result[i] = dataArray[j];
            j++;
        }
        System.out.print("Output:" + result + " ");
        System.arraycopy( result, 0, dataArray, 0, dataArray.length );

        sc.close();
    }
}

我的输入应该如下所示:

3 4 5 19 10
2

我的输出应如下所示:

Output: 5 19 10 3 4

我运行时的输出是:

Output:[I@42a57993

1 个答案:

答案 0 :(得分:3)

在Java中,如果你写了类似

的东西
System.out.print("Output:" + result + " ");

然后result将通过调用内置数组类的toString()方法转换为字符串,默认情况下只打印出一个不是特别易读的字符串,包含数组类型和数组的哈希码。在这种情况下,因为它是int的数组,所以您会看到类型([I)和哈希码(@42a57993)。

如果您想查看人类可读的数组版本,请使用Arrays.toString中的java.util方法:

System.out.print("Output:" + Arrays.toString(result) + " ");

对于它的价值,有许多算法可以使用O(1)辅助存储器就地旋转阵列。你可能想要阅读它们 - 它们非常聪明!