/* a)生成 20个取值范围在 0-20(包含20)之间的随机数,并将其存放到数组中 b)求数组中这 20个随机数的总和和平均数,平均数取整即可,不考虑小数点 c)采用排序算法,这 20个整数按照从小到大排序后输出(自己写排序算法,不要调用Arrays的方法。) d)实现对排序后的数字进行出现次数的统计,要求输出的顺序和排序的顺序一致, (不使用集合,不能对数组进行删减) */ import java.util.Arrays; import java.util.Random; public class Demo01 { public static void main(String[] args) { Random r = new Random();//实例化Random对象 int[] ints = new int[20];//实例化数组 int sum =0;//初始化总和 int ave = 0;//初始化平均数 for (int i = 0; i < ints.length; i++) { int ranNum = r.nextInt(21);//获取int类型的随机数 ints[i]= ranNum;//将随机数存进ints数组 sum += ints[i];//等同于 sum = sum+ ints[i];求和 ave = sum / 20;//求平均数 } //没有重写 Arrays的 toString 方法,所以打印需要调用 Arrays类的 toString方法,直接打印会显示内存地址而不是数组 System.out.println("排序前数组:"+ Arrays.toString(ints)); System.out.println("总和为"+sum); System.out.println("平均数为"+ave); //使用十大排序算法之一的冒泡排序进行排序 for (int i = 0; i < ints.length-1; i++) {//外层循环控制比较轮数 for (int j = 0; j < ints.length-1-i; j++) {//内层循环控制比较次数,每一轮减少了一个比较数 if(ints[j] > ints[j+1]){//当前者大于后者则进行调换位置 int temp = ints[j+1]; ints[j+1] = ints[j]; ints[j] = temp; } } } System.out.println("排序后数组:"+Arrays.toString(ints)); for (int i = 0; i < ints.length; i++) {//i为打印次数,ints.length-1为最后一次打印 int count = 0; if(i != ints.length-1 && ints[i] == ints[i+1]){ continue;//前后数相等并且不是最后一次打印时跳过打印 } for (int k:ints) {//foreach循环遍历 ints[],当 k与 ints[]其中一个数相等时,次数+1 if(ints[i] == k){//ints[i]表示ints[]其中任意一个数 count++; } } System.out.println(ints[i]+"出现的次数为"+count+"次"); } } }
打印结果为:
排序前数组:[6, 10, 7, 7, 9, 1, 13, 4, 6, 16, 17, 7, 4, 8, 13, 18, 10, 19, 7, 18]
总和为200
平均数为10
排序后数组:[1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 9, 10, 10, 13, 13, 16, 17, 18, 18, 19]
1出现的次数为1次
4出现的次数为2次
6出现的次数为2次
7出现的次数为4次
8出现的次数为1次
9出现的次数为1次
10出现的次数为2次
13出现的次数为2次
16出现的次数为1次
17出现的次数为1次
18出现的次数为2次
19出现的次数为1次