package com.demo.sw.test;
/**
*
* 循环移动一个数组中的数字:
* 如数数组:1,2,3,4,5,6,7
* 向前移动 3 位得到的结果是:
* 4,5,6,7,1,2,3
* @author Mr.J
*
*/
public class ArrayMove {
public static void main(String[] args) {
int[] arr = new int[12];
// 初始化要移动的数组
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
int num = 17; // 要移动的位数
moveNums(arr, num); // 调用要移动的方法
// 显示移动的结果
System.out.println("调用有返回值的方法:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
/*
* 方法 需要传进要移动的数组和移动的位移量
*/
public static int[] moveNums(int[] arr, int num) {
if(num > arr.length){ // 如果移动的位移量大于数组的长度,则会多转几圈
num = num % arr.length;
}
// 声明一个数组来存储数组前边被移动的数字
int[] copy = new int[num];
// 把原数组中要移动的数字存储起来
for (int i = 0; i < copy.length; i++) {
copy[i] = arr[i];
}
// 移动数组
for (int i = 0; i < arr.length - num; i++) {
arr[i] = arr[i + num];
}
// 移动完后把原来的数字追加到数组后边
for (int i = 0; i < copy.length; i++) {
arr[arr.length - num + i] = copy[i];
}
return arr;
}
}