Java 练习题程序随机生成50 个 0-9 之间的随机数,统计出现次数最多和出现次数最少的数字,及出现次数和频率


/**
     * 用程序随机生成50 个 0-9 之间的随机数,
     * * 将每个数字出现的次数存入一个一维数组,
     * * 统计出现次数最多和出现次数最少的数字,及出现次数和频率
     */
     
    public static void method06() {
        // 创建一个50个元素的一维数组
        int[] arr = new int[50];

        // 赋值
        // Math.random 生成的范围是[0,1) 转为int
        for (int i = 0; i < 50; i++) {
            int random = (int) (Math.random() * 10);
            arr[i] = random;
        }

        System.out.println("生成的原始数组");
        // 打印50个元素// 遍历尽量用增强for循环
        for (int value : arr) {
            System.out.print(value + " ");
        }

        System.out.println();



        // 将50个元素按照元素下标存储在一维数组中
        // 这个地方是碰巧存储的是0-9,不需要改变,直接套用即可,如果下标和实际连续数值不符,建议减去最小值,获取对应下标
        // num[0] 中存储的是0元素的个数
        // 以此类推
        int[] num = new int[10];
        for (int item : arr) {
            num[item]++;
        }

        System.out.println("0,1,2,3,4,5,6,7,8,9");
        // 打印
        for (int value : num) {
            System.out.print(value + " ");
        }
        System.out.println();

        // 统计出现次数最多的元素,一维数组求最大值
        int max = 0;
        for (int value : num) {
            if (max < value) {
                max = value;
            }
        }
        // 统计最大值所在的元素下标
        for (int i = 0; i < num.length; i++) {
            if (num[i] == max) {
                System.out.print(" 出现次数最多的是: " + i);
            }
        }
        System.out.println(" 次数是: " + max);
        double rate = (double) max / arr.length;
        System.out.println(" 出现的概率是: " + rate * 100 + "%");


        // 统计出现次数最多的元素,一维数组求最小值
        int min = num[0];
        for (int value : num) {
            if (min > value) {
                min = value;
            }
        }

        // 统计最大值所在的元素下标
        for (int i = 0; i < num.length; i++) {
            if (num[i] == min) {
                System.out.print(" 出现次数最少的是: " + i);

            }
        }
        System.out.println(" 次数是: " + min);
        double rate2 = (double) min / arr.length;
        System.out.println(" 出现的概率是: " + rate2 * 100 + "%");
    }
   

优化,省略后的代码

package hw;

public class hw {
    public static void main(String[] args) {

        // 用程序随机生成50个随机数
        // 将每个数字出现的次数存入一个一维数字
        // 统计出现次数最少 最多的数字,及出现的次数和频率

        // (int)(Math.random()*10);
        // random.nextInt(10);

        // 出现的频率 次数/50
        // 构建一个长度为10的数组,用来保存0-9数字出现的次数
        int[] arr = new int[10];
        // 0-9
        for (int i = 0; i < 50; i++) {
            int index = (int)(Math.random()*10);
            // 在对应的索引值位置上,次数累加1
            arr[index]++;
        }

        // 求出次数对应的最大索引值和最小索引值
        int max = 0;
        int min = 0;
        for (int i = 0; i < arr.length; i++) {
            // 求出最大索引值
            if(arr[i] > arr[max]){
                max = i;
            }
            // 求最小索引
            if(arr[min]>arr[i]){
                min = i;
            }
        }
        // 打印出现次数最多和最少的数字
        for (int i = 0; i < arr.length; i++) {
            // 统计出现次数最多的数字
            if(arr[max] == arr[i]){
                System.out.println("出现次数最多的数字是:"+i+",对应的次数: "+arr[i]);
                System.out.println("出现的频率是: " + arr[i] * 100.0 / 50 + "%");
            }
            if(arr[min] == arr[i]){
                System.out.println("出现次数最少的数字是:"+i+",对应的次数: "+arr[i]);
                System.out.println("出现的频率是: " + arr[i] * 100.0 / 50 + "%");
            }
        }
    }
}

已知双色球中红球的数字是 1 ~ 33 的任意值,编写一个程序
每次从 1 ~ 33 中随机抽出一个数值,循环 1000 次,请问循环完毕后,每个数值出现的次数

public class mainProgram {
    public static void main(String[] args) {
        // 创建一个名为arr的int类型数组,用来存放数字
        // index 0 - 32
        int[] arr = new int[33];

        for (int i = 0; i < 1000; i++) {
            // [0,1)*33
            // math的范围是 0 - 32
            arr[(int) (Math.random() * 33)]++;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println((i+1) +" 出现的次数是 "+ arr[i]);
        }
    }
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值