【问题标题】:Shifting elements and printing each step移动元素并打印每个步骤
【发布时间】:2018-01-22 02:37:26
【问题描述】:

我试图移动数组中的元素并打印每个步骤,直到它们回到原来的位置。数组必须填充随机数,并且不能超过 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 次。

【问题讨论】:

  • 欢迎来到 SO。您的代码的问题在于您将旋转数组分配给循环内的新变量。因为oldArray 永远不会改变它每次迭代都会得到相同的值。请参阅我的答案以获得解决方案。

标签: java arrays random


【解决方案1】:

移位的次数将与数组的大小相同。所以你真的只需要一个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();

【讨论】:

  • 它有效。感谢您提供有关如何更轻松地创建数组的提示。起初它复制了原始文件并将其打印了 N 次,但由于 while 循环不起作用,我设法用稍微不同的 for 循环绕过它。 (等于没用)
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2023-01-30
  • 2020-03-29
  • 2019-04-15
  • 2015-12-16
  • 2017-10-13
相关资源
最近更新 更多