Java基础算法题(36):有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

查看所有50道基础算法题请看:

Java的50道基础算法题

package Demo36Number_Roll;
import java.util.Arrays;
import java.util.Scanner;
/**
 * 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
 */
/*
分析:1.这n个数是由用户输入的,m也是用户输入的
     2.这n个数装到数组里面应该会好处理些
     3.新建一个长度跟原数组一样的数组
     4.遍历两个数组,对应m值进行数据转移
 */
public class Number_Roll {
    public static void main(String[] args) {
        System.out.println("输入n个整数,再输入m,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数");
        //获取用户的输入,并解析为一个数组
        Scanner sc = new Scanner(System.in);
        System.out.println("请直接输入数组元素,(以逗号作为间隔)");
        String str = sc.next();
        //分割用户输入得到一个字符串数组
        String[] strs = str.split(",|,");
        // 遍历这个字符串数组,将每个字符串解析为一个Integer,并装到Integer数组中
        int[] nums = new int[strs.length];
        int[] exchange = new int[nums.length];
        int m =0;
        try {
            for (int i = 0; i < strs.length; i++) {
                nums[i] = Integer.parseInt(strs[i]);
            }
            //新建一个长度一样的数组
            System.out.println("原数组:"+ Arrays.toString(nums));
            //让用户输入m的值
            System.out.println("请输入向后移动的位数m:");
            m = sc.nextInt();
        }catch (NumberFormatException e){
            System.out.println("你输入有误,请输入数字,其它字符不支持");
        }
        // 遍历两个数组,因为长度一样,所以一个for循环就足够
        for (int i = 0; i < nums.length; i++) {
            // m个数前的情况
            if(i<nums.length-m){
                exchange[i+m]=nums[i];
            }else if(i>=nums.length-m){
                // 最后的m个数放到新数组的最前面
                for (int j = 0; j < m; j++) {
                    exchange[j]=nums[nums.length-m+j];
                }
                // 转换完成,退出循环
            break;
            }
        }
        // 输出转换后的结果
        System.out.println("转换后:"+Arrays.toString(exchange));
    }
}

你可能感兴趣的:(Java算法题)