项目:数组位移与统计 练习

    技术2025-01-26  11

    实现效果图

    系统初始化

    系统主要功能

    项目源代码

    package project0704; import java.util.InputMismatchException; import java.util.Scanner; /** * Java数组位移与统计 * (1)插入数据 insertData * (2)显示所有数据 showData * (3)在指定位置处插入数据 insertAtArray * (4)查询能被3整除的数据 divThree * (5)提示信息方法的实现 notice * (6)打印分割线 printStar * (7)主方法的实现 main * @author LEGION-GJW */ public class DataManger { /** * 从键盘接收数据 * 将接收到的数据进行审核并新增到数组中去 * @return arr 数组 * @author LEGION-GJW */ public int[] insertData() { //首先定义好一个长度为10的数组 int[] arr = new int[10]; //因为Scanner类是在Java JDK的类库中保存的类 所以使用的时候需要进行导入 //暂时记住这个写法 Scanner用于监听跟键盘操作相关的内容 @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); //为插入数据提前做准备 长度为10的数组 只能暂时先接收9个数据 for (int i = 0; i < arr.length - 1; i++) { System.out.println("请输入第" + (i + 1) + "个数据"); //nextInt方法用于从键盘接收整型数据 try { //将可能会发生异常的语句放置到try代码块中 arr[i] = sc.nextInt(); } catch(InputMismatchException e) { //通过catch语句捕获可能会发生的异常(即输入非数字的时候)执行catch代码块中的内容 System.out.println("提示:输入的数据类型有误!必须是整数!"); //将有问题的键盘监听重新连接起来 使用next()继续去接收数据 sc.next(); //为了重新输入数据 所以针对以循环做一次重新开始 i--; } } return arr; } /** * 显示数组中元素的内容 * @param arr 数组名 * @param length 要显示的数组元素的个数 * @author LEGION-GJW */ public void showData(int[] arr, int length) { //将数组内容循环打印输出 for (int i = 0; i < length; i++) { System.out.print(arr[i] + " "); } //最后一个数据输出结束时需要换行 System.out.println(); } /** * 从键盘接收一个数据 插入到数组的指定位置 * @param arr 要插入数组的数组 * @param n 要插入的数据 * @param k 要插入的位置 * @author LEGION-GJW */ public void insertAtArray(int[] arr, int n, int k) { //注意从最后一个数据开始移动,避免数据覆盖 //如果数据溢出 只要将倒数第二个数据覆盖最后一个即可 for (int i = arr.length - 1; i > k - 1; i--) { arr[i] = arr[i - 1]; } //在第k个位置插入值 需要将索引值为k-1的数据覆盖 arr[k - 1] = n; } /** * 输出数组能被3整除的元素 * @param a 数组名 * @param length 要显示的数组元素的个数 * @author LEGION-GJW */ public void divThree(int[] arr, int length) { //str用于保存能被三整除的数据 用字符串拼接保存即可 String str = ""; //遍历数组 查找能被3整除的数字 for (int n = 0; n < length; n++) { if (arr[n] % 3 == 0) { //实现字符串的拼接 str = str + arr[n] + " "; } } //判断并输出结果 if (str == "") { System.out.println("数组中没有能被3整除的元素!"); } else { System.out.println("数组中能被3整除的元素为:" + str); } } /** * 提示信息 * @author LEGION-GJW */ public void notice() { printStar(); System.out.println(" 1--录入数据"); System.out.println(" 2--显示所有数据"); System.out.println(" 3--在指定位置处插入数据"); System.out.println(" 4--查询能被3整除的数据"); System.out.println(" 0--退出"); printStar(); } /** * 打印分割线 * @author LEGION-GJW */ public void printStar() { System.out.println("********************************************"); } /** * 主方法的实现 * @author LEGION-GJW */ public static void main(String[] args) { DataManger dm = new DataManger(); //将接收数据语句提取出来 @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); //将输入数据提取出来 int input; //先定义数组为一个空数组 int[] a = null; //n表示要插入的数据,k表示插入位置 int n = 0, k = 0; //flag标记是否进行过插入数据 即数组最后一个位置是否被占用 boolean flag = false; //首先实现循环输入5个指示数字 while (true) { //循环提示 dm.notice(); //输入提示 System.out.println("请输入对应的数字进行操作:"); //判断键入数据是否为整数 try{ input = sc.nextInt(); } catch(InputMismatchException e){ dm.printStar(); System.out.println("提示:输入的数据格式有误!必须是整数!"); sc.next(); //结束本次循环 开始新的循环 continue; } //针对0单独处理 退出循环 if (input == 0) { System.out.println("退出程序!"); break; } //通过switch语句根据操作数进行操作的选择 switch (input) { //录入数据 case 1: { //录入数据 并接收得到的数据 a = dm.insertData(); //显示数据 dm.printStar(); System.out.println("数组元素为:"); dm.showData(a, a.length-1); //每次重新录入 需要将flag改成false flag = false; break; } //显示所有数据 case 2: { //需要判断数组是否已经赋值 if (a == null) { dm.printStar(); System.out.println("提示:还未在数组中录入数据!请重新选择操作!"); } else { dm.printStar(); System.out.println("数组元素为:"); //如果flag为false 说明还没有插入数据 因此不显示最后一个元素 if (flag == false) { dm.showData(a, a.length - 1); } else { dm.showData(a, a.length); } } break; } //在指定位置处插入数据 case 3: { if (a == null) { dm.printStar(); System.out.println("提示:还未在数组中录入数据!请重新选择操作!"); } else { System.out.println("请输入要插入的数据:"); //防止插入的数据不合法 while(true) { try { n = sc.nextInt(); break; } catch(InputMismatchException e) { System.out.println("提示:输入的数据格式有误!必须是整数!"); System.out.println("请重新输入要插入的数据:"); sc.next(); } } //在数据已合法的基础上 防止插入的位置不合法 System.out.println("请输入要插入数据的位置:"); while(true) { try { k = sc.nextInt(); while(true) { if (k < 1 || k > 10) { System.out.println("提示:插入位置越界!请输入1-10内的整数!"); System.out.println("请重新输入插入的位置:"); k = sc.nextInt(); } else { break; } } break; } catch(InputMismatchException e) { System.out.println("提示:输入的插入位置有误!必须是整数!"); System.out.println("请重新输入插入的位置:"); sc.next(); } } //数据合法且位置合法 则插入成功 dm.printStar(); System.out.println("提示:插入成功!"); //插入成功时更改flag 防止数据显示不全 flag = true; //调用插入函数 dm.insertAtArray(a, n, k); dm.showData(a, a.length); } break; } //查询数组中能被3整除的元素 case 4: { if (a == null) { dm.printStar(); System.out.println("提示:还未在数组中录入数据!请重新选择操作!"); } else { dm.printStar(); //验证数组最后一个位置是否启用 if (flag == false) { dm.divThree(a, 9); } else { dm.divThree(a, 10); } } break; } //输入的菜单选项不合法 default: { dm.printStar(); System.out.println("提示:输入无效!"); } } } } }
    Processed: 0.013, SQL: 9