认识Arrays类 使用Arrays类为数组排序 使用javautilArrays类 java.util包提供的工具类 Arrays类提供操作数组的方法,如:排序查询 Arrays类的sort0方法对数组进行升序排列 Arrays.sort(数组名); 需求说明 获取一组(如5名)学员成绩,并使用Arrays类对其排序 /*Arrays排序5名学员成绩*/ Scanner input = new Scanner(System.in); System.out.println("请输入5名同学的成绩:"); int[] scores = new int[5]; for(int i= 0;i<scores.length;i++){ System.out.println("请输入第"+(i+1)+"名同学的成绩:"); scores[i] = input.nextInt(); } System.out.println("*********Arrays排序前************"); for(int num : scores){ System.out.println(num); } //Arrays排序 Arrays.sort(scores); System.out.println("*********Arrays升序排序后************"); for(int num : scores){ System.out.println(num); } System.out.println("*********Arrays降序排序后************"); for(int i=scores.length-1;i>=0;i--){ System.out.println(scores[i]); } 总结 使用JDKAPI文档,查阅Arrays类作用 Arrays类排序数组的方法 Arrays sort() Arrays类的应用 方法名称 说明 boolean equals(array1,array2) 比较array1和array2两个数组是否相等 sort(array) 对数组array的元素进行升序排列 String toString(array) 将一个数组array转换成一个字符串 void fill(array,val) 把数组array所有元素都赋值为val copyOf(array,length) 把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致 int binarySearch(array, val) 查询元素值val在数组array中的下标(要求数组中元素已经按升序排列) //equals(array1,array2) 的作用是:比较两个数组是否相等 System.out.println("----equals(array1,array2)方法:----"); int [] arr1 = {10,50,40,30}; int [] arr2 = {10,50,40,30}; int [] arr3 = {60,50,85}; System.out.println(Arrays.equals(arr1, arr2)); System.out.println(Arrays.equals(arr1, arr3));
//toString(array) 的作用是:将一个数组array转换成一个字符串 System.out.println("----toString(array)方法:----"); int [] arr = {10,50,40,30}; System.out.println(Arrays.toString(arr)); //fill(array,val) 的作用是:把数组array的所有元素都赋值为val System.out.println("----fill(array,val)方法:----"); int [] arr4 = {10,50,40,30}; Arrays.fill(arr4, 100); System.out.println(Arrays.toString(arr4));
//copyOf(array,length) 的作用是:把数组array复制成一个长度为length的新数组 System.out.println("----copyOf(array,length)方法:----"); int [] array1 = {10,50,40,30}; int [] array2 = Arrays.copyOf(array1, 6); System.out.println(Arrays.toString(array2)); int [] array3 = Arrays.copyOf(array1, 3); System.out.println(Arrays.toString(array3)); //binarySearch(array, val) 的作用是:查询元素值val在数组array中的下标 System.out.println("----binarySearch(array, val)方法:----"); int [] array4 = {10,50,40,30}; Arrays.sort(array4); // 10 30 40 50 int index = Arrays.binarySearch(array4, 30); System.out.println(index); int index1 = Arrays.binarySearch(array4, 100); System.out.println(index1);
//使用Arrays类升序排列一组字符,并查找某个特殊字符在升序后数组中的位置 // 字符排序 char[] chars = new char[] { 'a', 'c', 'u', 'b', 'e', 'p', 'f', 'z' };
System.out.print("原字符序列:"); for (char oldChar:chars) { System.out.print(oldChar + " "); } //查找特定字符b的位置 Arrays.sort(chars); System.out.print("\n排序后的字符序列:"); for (char oldChar:chars) { System.out.print(oldChar + " "); } int index = Arrays.binarySearch(chars, 'b'); System.out.println("\n字符b在数组中的位置是: "+index); 总结 Arrays类常用方法 sort() binarySearch() 常用的需记忆,其他的方法,使用JDKAPI文档,边查阅边练习 认识二维数组 为什么学习多维数组 要求对5个班各5名学生某门课程的成绩进行各种操作,如何实现? 分析 1个班5名学生成绩 长度为5的一维数组 5个班5名学生成绩 5个长度为5的一维数组? 二维数组 <数据类型>[][] 数组名; 或者 <数据类型>数组名 [][]; int [][]scores; //定义二维数组 scores=new int[5][50]; //分配内存空间 //或者 int [ ][ ] scores = new int[5][50]; 定义二维数组时,要定义最大维数 int [ ][ ] scores = new int[5][]; int [ ][ ] scores = new int[][]; 二维数组实际上是一个以一维数组做为元素的一维数组 二维数组与内存 int[][] s = new int [3][5] s[0] s[0][0]s[0][1]s[0][2]s[0][3]s[0][4] s s[1] s[1][0]s[1][1]s[1][2]s[1][3]s[1][4] s[2] s[2][0]s[2][1]s[2][2]s[2][3]s[2][4] 总结 从内存分配原理的角度讲,只有一维数组 从语法上Java支持多维数组 三维及以上的数组很少使用 主要使用二维数组 二维数组 声明 数据类型:数组名;或者<数据类型>数组 二维数组与内存 必须自己能画出来,并快速定位到某个元素 二维数组定义时,[]中两个数字分别代表什么? 二维数组定义与使用 定义并赋值 写法一 int[][] scores = new int[][]{{ 90, 85, 92, 78, 54 3},{76, 63,80 3},{87}}; 写法二 int scores[][] = {{ 90, 85, 92, 78, 54},{76, 3,80},{87}}; 案例 //有5个班各5名学生某门课程的成绩,如何计算5个班各自的总成绩 int[][] scores = new int[5][5]; //第一个5代表5个班;第二个5代表是每个班5个同学的成绩 Scanner input = new Scanner(System.in); //为班级的同学成绩赋值 //外层循环- 班 ;内层循环-班里的同学 for(int i=0;i<scores.length;i++){ System.out.println("-------第"+(i+1)+"个班-------"); for(int j=0;j<scores[i].length;j++){ System.out.print("请输入第"+(i+1)+"个班第"+(j+1)+"个同学的成绩:"); scores[i][j]= input.nextInt(); } } //完成5个班级的成绩统计 System.out.println("--------统计成绩---------"); for(int i=0;i<scores.length;i++){ int sum = 0; //每个班同学成绩的总分 for(int j=0;j<scores[i].length;j++){ sum += scores[i][j]; } System.out.println("第"+(i+1)+"个班的同学总成绩为:"+sum); } 总结 二维数组定义与赋值 两种写法对比一维数组 二维数组的使用 二维数组结合双重循环使用是重难点需反复观看视频,练习代码 内外层循环变量的含义是理解的关键 总结 使阳冒泡排序从小到大排列5个数字的思路是什么? 如何使用Arrays类排序一个数组?查找一个元素? 遍历一个二维数组的思路是什么 ?