移动元素并打印每一步

时间:2018-01-22 02:37:26

标签: java arrays random

我试图移动数组中的元素并打印每一步,直到它们回到原始位置。数组必须填充随机数,且大小不得超过15.我在转换发生时通过创建一个新数组来完成任务。如果有人有任何更好的建议,请告诉我。 我已经完成了阵列和移位部分,但似乎无法弄清楚如何重复它。 以下是我提出的建议:

public static void main(String[] args) {

    System.out.println("Enter size: ");
    Scanner s = new Scanner(System.in);
    int p = s.nextInt();
    if (p > 15) {
        System.out.println("Too much to handle!");
    }
    int oldArray[] = new int [p];
for (int i = 0; i<oldArray.length;i++) {
        oldArray[i]=(int)(Math.random()*10);
    }
    int newArray[] = moveA(oldArray);
    printA(oldArray);
    printA(newArray);
}

public static int[] moveA(int[] array1) {
int[] array2 = new int[array1.length];

 for (int i = 0; i < array2.length - 1; i++) {
    array2[i+1] = array1[i];
}
array2[0] = array1[array1.length - 1];
return array2;
}

public static void printA(int[] arr) {
    System.out.println(Arrays.toString(arr));
}

代码打印如下:

Enter size: 
4
[1, 5, 9, 3]
[3, 1, 5, 9]

我试过在:

进行for循环
for ( int b = 0; b <= oldArray.length; b++)
int newArray[] = moveA(oldArray);
printA(oldArray);
printA(newArray)

但它所做的只是打印4次。

1 个答案:

答案 0 :(得分:0)

您移动的次数与数组的大小相同。所以你真的需要一个for循环:

int[] original = ...;
int[] current = original;
for (int i = 0; i < original.length; i++) {
    current = moveA(current);
    printA(current);
}

随机数可能会生成一个具有复制序列的数组,该序列在完整周期完成之前返回到原始位置。如果您需要考虑到这种情况:

int[] current = moveA(original);
while (!Array.equals(current, orginal)) {
    printA(current);
    current = moveA(current);
}

最后,Java 8+为您提供了一种生成随机数组的更快方法。以下将生成0-9范围内的5个整数数组:

int[] original = new Random().ints(5, 0, 10).toArray();