Java50道经典习题-程序36 移动位置

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
分析:比如有4个数n=4;
1 2 3 4
各个数向后移动2位m=2,变为
    1 2 3 4
将最后m个数,即将最后2个数变成前面的2个数变为
3 4 1 2
 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 public class Prog36 {
 4     public static void main(String[] args) {
 5         //获取用户输入数据
 6         Scanner scan=new Scanner(System.in);
 7         System.out.println("请输入想要输入的整数个数n:");
 8         int n=scan.nextInt();
 9         int []arr=new int[n];
10         System.out.println("请依次输入这n个整数:");
11         for(int i=0;i<n;i++) {
12             arr[i]=scan.nextInt();
13         }
14         System.out.println("请输入想要移动的位数m:");
15         int m=scan.nextInt();
16         scan.close();
17         //输出原始数据
18         System.out.println("输入的数组是:"+Arrays.toString(arr));
19         arr.toString();
20         //调用函数输出移动后的数组
21         System.out.println("移动位置之后的数组是:"+move(arr,n,m));
22     }
23     //编写函数实现题目移动位置功能
24     public static String move(int[]arr,int n,int m) {
25         //新建一个数组拷贝原来的数组,使原来的数组长度+m
26         int []arr2=new int[arr.length+m];
27         for(int j=0;j<arr2.length-m;j++) {//从数组的m位开始,将原来的数组拷贝到新数组中
28             if(j<m) {
29                 arr2[j]=arr[n-m+j];//将数组的后几位要移动的数字放在新数组的前面
30             }else {
31                 arr2[j]=arr[j-m];//将数组的剩下的位数放近新数组中
32             }
33         }
34         //将移动位置之后的新数组的元素拷贝至原数组中
35         for(int t=0;t<n;t++) {
36             arr[t]=arr2[t];
37         }
38         return Arrays.toString(arr);
39  
40     }
41 }
42 /*运行结果
43 请输入想要输入的整数个数n:
44 4
45 请依次输入这n个整数:
46 1
47 2
48 3
49 4
50 请输入想要移动的位数m:
51 2
52 输入的数组是:[1, 2, 3, 4]
53 移动位置之后的数组是:[3, 4, 1, 2]
54 */

 

posted @ 2019-04-30 16:04  parkour高手  阅读(348)  评论(0编辑  收藏  举报