我试图移动数组中的元素并打印每一步,直到它们回到原始位置。数组必须填充随机数,且大小不得超过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次。
答案 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();