Java数组旋转程序


数组是一种线性数据结构,用于存储一组具有相似数据类型的元素。它以顺序方式存储数据。一旦我们创建了一个数组,我们就无法更改其大小,也就是说,它可以存储固定数量的元素。数组具有广泛的应用和用例。此外,我们可以在数组上执行许多操作。本文将帮助您了解数组的基础知识,我们还将编写Java程序来对数组执行向右和向左旋转操作。

Java数组旋转程序

首先,让我们了解在数组上下文中向右和向左旋转的含义。

在数组的向右旋转中,我们只需将数组的元素向右移动到指定的位数,反之亦然,在向左旋转的情况下,如下例所示。

示例

声明数组的语法

Data_Type nameOfarray[]; // declaration
Or,
// declaration with size
Data_Type nameOfarray[] = new Data_Type[sizeofarray];

我们可以在程序中使用上述任何语法。

在直接跳转到程序之前,让我们了解一下我们将要在示例程序中使用的名为“System.arraycopy()”的内置方法。

System.arraycopy()方法

java.lang.System.arraycopy()是Java System类的静态方法,用于将源数组从指定的索引复制到目标数组的指定索引。

语法

System.arraycopy(srcArray, index1, destArray, index2, length);

这里:

  • srcArray - 要复制的数组。

  • index1 - 需要复制的源数组的起始索引。

  • index2 - 元素将被复制到的目标数组的起始索引。

  • destArray - 将复制元素的数组。

  • length - 要复制的元素数量。

示例1

在下面的示例中,我们将数组向左旋转两次,从第二个索引开始。

方法

  • 首先,定义一个方法以及两个参数,它们接受整数和索引作为参数。

  • 在这个方法内部,创建一个临时数组来存储旋转后的元素。然后,使用“arraycopy()”方法将原始数组从指定的索引复制到临时数组。

  • 再次使用“arraycopy()”方法将原始数组的剩余元素复制到临时数组,以便元素向左移动。现在,再次使用“arraycopy()”方法将所有旋转后的元素从临时数组复制到原始数组。

  • 在main()方法中,声明并初始化一个整数数组,然后初始化一个整数变量以指定要旋转的索引。然后,调用用户定义的方法来旋转数组。

import java.util.Arrays;
public class ArrayRotationleft {
   // user-defined method to rotate the given array
   public static void rotateArray(int[] arr, int rotateBy) {
      int length = arr.length;
      // Calculate the effective rotation value
      int rotation = rotateBy % length;
      // Create a temporary array to store rotated elements
      int[] temp = new int[rotation];
      // Copy elements till the rotateBy to the temporary array
      System.arraycopy(arr, 0, temp, 0, rotation);
      // Shift the remaining elements to the left
      System.arraycopy(arr, rotation, arr, 0, length - rotation);
      // Copy the rotated elements from the temporary array to the original array
      System.arraycopy(temp, 0, arr, length - rotation, rotation);
   }
   public static void main(String[] args) {
      // declaring and initializing an array
      int[] arr = { 5, 7, 89, 91, 34, 21, 11, 0 };
      int rotateBy = 2;
      System.out.println("The original array is as follows: ");
      // for-each loop to print original array 
      for(int print : arr) {
         System.out.print(print + " ");
      }
      System.out.println();
      System.out.println("The array after left rotation: ");
      // calling the method to rotate the array
      rotateArray(arr, rotateBy);
      // for-each loop to print rotated array
      for(int print : arr) {
         System.out.print(print + " ");
      }
   }
}

输出

The original array is as follows: 
5 7 89 91 34 21 11 0 
The array after left rotation: 
89 91 34 21 11 0 5 7

示例2

要执行向右旋转,我们需要从要旋转数组的位置复制元素,而不是从第0个索引复制原始数组。

import java.util.Arrays;
public class ArrayRotationright {
   public static void main(String[] args) {
      // declaring and initializing an array
      int[] arr = { 5, 7, 89, 91, 34, 21, 11, 0 };
      int rotateBy = 2;
      System.out.println("The original array is as follows: ");
      // for-each loop to print original array 
      for(int print : arr) {
         System.out.print(print + " ");
      }
      System.out.println();
      System.out.println("The array after right rotation: ");
      // calling the method to rotate the array
      rotateArray(arr, rotateBy);
      // for-each loop to print rotated array
      for(int print : arr) {
         System.out.print(print + " ");
      }
   }
   // user-defined method to rotate the given array
   public static void rotateArray(int[] arr, int rotateBy) {
      int length = arr.length;
      // Calculate the effective rotation value
      int rotation = rotateBy % length;
      // Create a temporary array to store rotated elements
      int[] temp = new int[rotation];
      // Copy the elements till rotateBy to the temporary array
      System.arraycopy(arr, length - rotation, temp, 0, rotation);
      // Shift the remaining elements to the right
      System.arraycopy(arr, 0, arr, rotation, length - rotation);
      // Copy the rotated elements from the temporary array to the original array
      System.arraycopy(temp, 0, arr, 0, rotation);
   }
}

输出

The original array is as follows: 
5 7 89 91 34 21 11 0 
The array after right rotation: 
11 0 5 7 89 91 34 21

结论

在本文中,我们了解了什么是数组,并讨论了两个用于执行数组向右和向左旋转的Java程序。此外,我们还发现了arraycopy()方法,它在将元素从一个数组复制到另一个数组时非常有用。

更新于:2023年8月10日

369 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告