💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# 数组移位与统计 [TOC] ## 导学 本节课,我们来针对之前学习过的内容进行一次综合应用。通过一个案例,来复习和学习一个比较综合的程序的编程过程。 ## 需求分析 需求:定义一个类,对数组中的数据进行管理(增删改查) 方法: 1. 插入数据:`public int[] insertData() {}` 2. 显示所有数据 `public void showData(int[] a, int length) {}` 3. 在指定位置处插入数据 `public void insertAtArray(int[] a,int n,int k) {}` 4. 查询能被3整除的数据 `public void divThree(int[] a) {}` ## 基础方法的实现 ### 从键盘接收数据 ~~~ /** * 从键盘接收数据,将接收到的数据进行审核,并新增到数组中去 * @return */ public int[] insertData() { //首先定义好一个长度为10的数组 int[] a = new int[10]; //因为Scanner类,不是我们在同一个包中创建的类,是在Java JDK的类库中保存的类,所以使用的时候需要进行导入。 //暂时记住这个写法,Scanner用于监听跟键盘操作相关的内容 Scanner sc = new Scanner(System.in); //为插入数据提前做准备,长度为10的数组只能暂时先接收九个数据。 for(int i = 0; i < a.length - 1; i++) { System.out.println("请输入第" + (i + 1) + "个数据"); //nextInt方法用于从键盘接收整型数据 try { //将可能会发生异常的语句放置到try代码块中 a[i] = sc.nextInt(); } catch(InputMismatchException e) {//通过catch语句捕获可能会发生的异常,即输入非数字的时候,执行catch代码块中的内容 System.out.println("输入的数据类型有误,不能是非数字"); //将有问题的键盘监听重新连接起来,使用next()继续去接收数据 sc.next(); //为了重新输入数据,所以针对以循环做一次重新开始 i--; } } return a; } ~~~ ### 数组元素的显示 ~~~ /** * 显示数组中元素的内容 * @param a 数组名 * @param length 要显示的数组元素的个数 */ public void showData(int[] a, int length) { for (int i = 0; i < length; i++) { System.out.print(a[i] + " "); } System.out.println(); } ~~~ ### 在指定位置处插入数据 ~~~ /** * 从键盘接收一个数据,插入到数组的指定位置处 * @param a 要插入数据的数组 * @param n 要插入的数据 * @param k 要插入的位置,从0开始 */ public void insertAtArray(int[] a, int n, int k) { // 注意从最后一个数据开始移动,避免数据覆盖 for (int i = a.length - 1; i > k; i--) { a[i] = a[i - 1]; } a[k] = n; } public static void main(String[] args) { DataManger dm = new DataManger(); int[] a = dm.insertData(); dm.showData(a, a.length-1);//输出全部数据 Scanner sc = new Scanner(System.in);//其实此处也要处理一下非整数输入的问题 System.out.println("请输入要插入的数据:"); int n = sc.nextInt(); System.out.println("请输入要插入的位置:"); int k = sc.nextInt(); dm.insertAtArray(a, n, k); dm.showData(a, a.length); } ~~~ ### 能被3整除的方法 ~~~ /** * 输出数组中能被3整除的元素 * * @param a */ public void divThree(int[] a) { String str = "";//用于保存能被三整除的数据 int count = 0; for (int n : a) { if (n % 3 == 0) { str = str + n + " "; count++; } } if (count == 0) { System.out.println("数组中没有能被3整除的元素!"); } else { System.out.println("数组中能被3整除的元素为:" + str); } } public static void main(String[] args) { DataManger dm = new DataManger(); int[] a = dm.insertData(); dm.showData(a, a.length-1);//输出全部数据 Scanner sc = new Scanner(System.in);//其实此处也要处理一下非整数输入的问题 System.out.println("请输入要插入的数据:"); int n = sc.nextInt(); System.out.println("请输入要插入的位置:"); int k = sc.nextInt(); dm.insertAtArray(a, n, k); dm.showData(a, a.length); dm.divThree(a); } ~~~ ### 提示信息方法的实现 即实现在主方法中流程的控制,我们希望在主方法中更多的去关注实现逻辑上的控制。 ~~~ /** * 提示信息 */ public void notice() { System.out.println("********************************************"); System.out.println(" 1--插入数据"); System.out.println(" 2--显示所有数据"); System.out.println(" 3--在指定位置处插入数据"); System.out.println(" 4--查询能被3整除的数据"); System.out.println(" 0--退出"); System.out.println("********************************************"); } ~~~ ## 主方法的实现 ~~~ public static void main(String[] args) { DataManger dm = new DataManger(); // int[] a = dm.insertData(); // * dm.showData(a, 8);//输出全部数据 // 将接收数据语句提取出来 Scanner sc = new Scanner(System.in); // 将输入数据提取出来 int input; int[] a = null;//先定义数组为一个空数组 int n=0,k=0;//n表示要插入的数据,k表示插入位置 // 1 首先实现循环输入5个指示数字 while (true) { // 循环提示 dm.notice(); // 进行提示 System.out.println("请输入对应的数字进行操作:"); // 接收键盘操作数据 try{ input = sc.nextInt(); }catch(InputMismatchException e){ System.out.println("输入的数据格式有误,不能有非数字!"); sc.next(); continue; } // 针对0单独处理,退出程序(退出循环) if (input == 0) { System.out.println("退出程序!"); break; } // 通过switch语句根据操作数进行操作的选择 switch (input) { case 1:{ //插入数据,并接收得到的数据 a = dm.insertData(); //显示数据 System.out.println("数组元素为:"); dm.showData(a, a.length-1); break; } case 2:{//显示数据 //需要判断数组是否已经赋值 if(a != null) { System.out.println("数组元素为:"); if(a[a.length-1]==0){ //如果数组的最后一个元素为0,说明还没有拆入数据,因此不显示最后一个元素 dm.showData(a, a.length-1); }else{ dm.showData(a, a.length); } } else { System.out.println("还未在数组中插入数据,请重新选择操作!"); } break; } case 3:{ if(a!=null){ System.out.println("请输入要插入的数据:"); try{ n=sc.nextInt(); System.out.println("请输入要插入数据的位置:"); k=sc.nextInt(); }catch(InputMismatchException e){ System.out.println("输入的数据格式有误,不能有非数字!"); sc.next(); break; } dm.insertAtArray(a, n, k); dm.showData(a, a.length); }else{ System.out.println("还未在数组中插入数据,请重新选择操作!"); } break; } case 4:{ //查询数组中能被3整除的元素 if(a!=null){ dm.divThree(a); }else{ System.out.println("还未在数组中插入数据,请重新选择操作!"); } break; } default: { System.out.println("请输入对应的数字进行操作!"); } } } } ~~~