/**
* 用程序随机生成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]);
}
}
}