用于数组旋转的 Java 程序

javaobject oriented programmingprogramming更新于 2024/11/29 6:36:17

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

用于数组旋转的 Java 程序

首先,让我们在数组上下文中了解左右旋转的术语。

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

实例

声明数组的语法

Data_Type nameOfarray[]; // 声明
或者,
// 带大小的声明
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 − 将复制元素的数组。

  • 长度 − 要复制的元素数量。

示例 1

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

方法

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

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

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

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

import java.util.Arrays;
public class ArrayRotationleft {
    // 用户定义方法来旋转给定的数组
    public static void rotateArray(int[] arr, int rotateBy) {
        int length = arr.length;
        // 计算有效旋转值
        int rotation = rotateBy % length;
        // 创建一个临时数组来存储旋转后的元素
        int[] temp = new int[rotation];
        // 将 rotateBy 之前的元素复制到临时数组中
        System.arraycopy(arr, 0, temp, 0, rotation);
        // 将剩余元素向左移动
        System.arraycopy(arr, rotation, arr, 0, length - rotation);
        // 将旋转后的元素从临时数组复制到原始数组中
        System.arraycopy(temp, 0, arr, length - rotation, rotation);
    }
    public static void main(String[] args) {
        // 声明并初始化一个数组
        int[] arr = { 5, 7, 89, 91, 34, 21, 11, 0 };
        int rotateBy = 2;
        System.out.println("原始数组如下: ");
        // for-each 循环打印原始数组
        for(int print : arr) {
        	System.out.print(print + " ");
        }
        System.out.println();
        System.out.println("左旋转后的数组: ");
        // 调用方法旋转数组
        rotateArray(arr, rotateBy);
        // for-each 循环打印旋转后的数组
        for(int print : arr) {
        	System.out.print(print + " ");
        }
    }
}

输出

原始数组如下:
5 7 89 91 34 21 11 0
左旋转后的数组:
89 91 34 21 11 0 5 7

示例 2

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

import java.util.Arrays;
public class ArrayRotationright {
   public static void main(String[] args) {
      	// 声明并初始化一个数组
        int[] arr = { 5, 7, 89, 91, 34, 21, 11, 0 };
        int rotateBy = 2;
        System.out.println("原始数组如下: ");
        // for-each 循环打印原始数组
        for(int print : arr) {
        	System.out.print(print + " ");
        }
        System.out.println();
        System.out.println("右旋转后的数组: ");
        // 调用方法旋转数组
        rotateArray(arr, rotateBy);
        // for-each 循环打印旋转后的数组
        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;
        // 计算有效旋转值
        int rotation = rotateBy % length;
        // 创建一个临时数组来存储旋转后的元素
        int[] temp = new int[rotation];
        // 将直到 rotateBy 的元素复制到临时数组中
        System.arraycopy(arr, length - rotation, temp, 0, rotation);
        // 将剩余元素向右移动
        System.arraycopy(arr, 0, arr, rotation, length - rotation);
        // 将旋转后的元素从临时数组复制到原始数组中
        System.arraycopy(temp, 0, arr, 0, rotation);
   }
}

输出

原始数组如下:
5 7 89 91 34 21 11 0
右旋转后的数组:
11 0 5 7 89 91 34 21

结论

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


相关文章


有用资源