程序分析
方法1:将数组分解后重新合并
首先将数组按照移位要求将数组分解程前后两部分,接着将分解的结果合并起来。
private static void moveBack1(int[] arr,int m) {
int n = arr.length;
int[] arr1 = new int[n-m]; //数组arr1存储数组arr(index=0~m)的元素
int[] arr2 = new int[m]; //数组arr2存储数组arr(index=m+1~n-1)的元素
for (int i = 0; i < (n-m); i++) {
arr1[i] = arr[i];
}
for (int i = 0; i < arr2.length; i++) {
arr2[i] = arr[n- m + i];
}
// 重新将arr1和arr2的元素按照要求填充至数组arr中
for (int i = 0,j = 0 - m; i < arr.length; i++,j++) {
if (i < m){
arr[i] = arr2[i];
}
if (i >= m){
arr[i] = arr1[j];
}
}
}
方法2:
代码实现
import java.util.Scanner;
/*36、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数*/
public class Test {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7};
System.out.println("请输入向后移动的位数:");
int m = input.nextInt();
// 方法1测试
System.out.println("数组元素移动之前:");
printArr(arr);
moveBack1(arr,m);//数组元素向后移动m位
System.out.println("\n数组元素移动之后:");
printArr(arr);
// 方法2测试
}
// 向后移动数组元素
// 方法1
private static void moveBack1(int[] arr,int m) {
int n = arr.length;
int[] arr1 = new int[n-m]; //数组arr1存储数组arr(index=0~m)的元素
int[] arr2 = new int[m]; //数组arr2存储数组arr(index=m+1~n-1)的元素
for (int i = 0; i < (n-m); i++) {
arr1[i] = arr[i];
}
for (int i = 0; i < arr2.length; i++) {
arr2[i] = arr[n- m + i];
}
// 重新将arr1和arr2的元素按照要求填充至数组arr中
for (int i = 0,j = 0 - m; i < arr.length; i++,j++) {
if (i < m){
arr[i] = arr2[i];
}
if (i >= m){
arr[i] = arr1[j];
}
}
}
// 打印数组元素
public static void printArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}