有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

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));
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容