方法一:生成的数字存进数组,排序后统计
import java.util.*;
public class CountTest{
public static void main(String[] args){
int ARRAYLENGTH = 50;
int a[] = new int[ARRAYLENGTH];
Random ran = new Random();
// 产生ARRAYLENGTH个10~50之间的整数
for(int i = 0; i < ARRAYLENGTH; i++){
a[i] = ran.nextInt(40) + 10;
}
//原数组
System.out.println("原数组a = " + Arrays.toString(a));
//对原数组作冒泡排序
for(int i = 0; i < a.length; i++){ //第i轮排序
for(int j = 0; j < a.length - i - 1; j++){ //每轮排序进行a.length - i - 1次比较/交换
if(a[j] > a[j+1]){
int tmp = a[j]; //此处不能用传统swap函数,因Java对普通类型的变量是不支持引用传递的
a[j] = a[j+1];
a[j+1] = tmp;
}
}
//System.out.println("第" + (i+1) + "伦排序后数组a = " + Arrays.toString(a));
}
//排序后的数组
System.out.println("排序后数组a = " + Arrays.toString(a));
System.out.println("---------------------------------------");
//统计每个数字及出现次数
for(int i = 0; i < a.length; i++){
int count = 0; //计数
for(int j = 0; j < a.length; j++){
if(a[i] == a[j]){
count++;
}
}
if(i < 49 && a[i] != a[i + 1] && count != 0){
System.out.println(a[i] + " 出现的次数为: " + count + " 次");
}
//此时已是最后一个数字,直接打印出现1次
if(i == 49){
System.out.println(a[i] + " 出现的次数为: " + count + " 次");
}
}
}
}
方法二:用单个一维数组实现
代码如下:
//生成50个[10,50)之间的整数并统计各个数字出现的次数
import java.util.*;
public class CountTest2{
public static void main(String[] args){
int ARRAYLENGTH = 50; //生成的数字个数
Random ran = new Random();
int a[] = new int[ARRAYLENGTH - 10]; //保存数字出现次数
System.out.println("生成的数字为: ");
// 生成50个随机数并记录出现次数
for(int i = 0; i < ARRAYLENGTH; i++){
int num = ran.nextInt(40) + 10;
System.out.print(num + " ");
a[num - 10]++;
}
System.out.println();
// 只需要打印最多40次
for(int i = 0; i < a.length; i++){
if(a[i] != 0){
System.out.println("数字 " + (i +10) + " 出现的次数为 " + a[i] + " 次");
}
}
}
}