方式一:使用数组实现
/*
* 随机生成x(50)个数字,每个数字范围是n~m[10~50],统计每个数字出现的次数以及某个数字出现的次数最多,以及最多个数。将每个数字
* 和其出现次数打印出来,如果某个数出现0次,则不打印。打印时按照数字升序
*/
public static void randomTest(int x,int n,int m){
int[] account = new int[m-n+1];//记录出现的m~n之间的不重复数字
int[] account1 = new int[x];//记录存储50个数字的数组
Random random = new Random();
for(int i=0;i<x;i++){//x代表随机生成多少个数字,所需要循环多少次
int number = random.nextInt(m-n+1)+n;//random.nextInt(50-10+1)+10 每个数字范围是[10,50]
System.out.println();
account1[i] = number;//将随机生成的x个数放入数组
System.out.println(number+"是数组account1的下标是"+i+"的值");
account[number-n]++;//number代表随机生成的数字,account数组下标表示number生成的次数
}
//统计每个数字出现的次数
System.out.println(account.length);
for(int i=0;i<account.length;i++){
if(0 == account[i]){//表示某个数字出现了0次
continue;//跳出本次循环进行下次循环
}
int arr_number= n+i;//表示50个随机数字,i+n 表示其中的一个(i+10) ,i表示出现的次数
System.out.println(arr_number+"出现了"+account[i]+"次!");
}
//统计出现的次数最多数字,以及最多个数 ;取account数组值记录的是某个数出现的次数,所以去account数组最大值
int max = account[0];
for(int i=0;i<account.length;i++){
if(max<account[i]){
max = account[i];
}
}
System.out.println("50个数字里出现的最大次数是"+max);
//统计出现最大次数的数字值
for(int i=0;i<account.length;i++){
if(max== account[i]){
System.out.println("50个数字里出现最大次数"+max+"次的数字是"+(i+n));
}
}
}
main方法调用:
randomTest(50,10,50);
方式二:借助HashMap特性实现
//生成50个 [10,50]之间的随机数字方式一
public static int[] getRandomNum(){
int[] a = new int[50] ;
Random random = new Random();
for(int i=0;i<50;i++){
//random.nextInt(n) 返回0到n之间的随机数字
System.out.println(random.nextInt(41)+10);
a[i] = random.nextInt(41)+10;
}
return a;
}
/*
* 方式二,将随机生成的50个[10,50]之间数字存放到map中,因为map中key值不能重复,所以用key值记录[10,50]数字值, 用 value值记录数字出现的个数
*/
int[] aa = getRandomNum();
HashMap hashMap = new HashMap();
for(int i=0;i<aa.length;i++){
if(hashMap.get(aa[i]) == null){//map的key值不存在
hashMap.put(aa[i], new Integer(1));
}else{
Integer in = (Integer)hashMap.get(aa[1]);
hashMap.put(aa[i], in.intValue()+1);
}
}
System.out.println("统计每个数字出现的次数");
Set set = hashMap.entrySet();
Iterator iter = set.iterator();
int a =0;//次数
int b = 0;//数字
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("数字"+key+"出现了"+value+"次");
//统计出现的次数最多数字,以及最多个数
Integer in = (Integer)entry.getValue();//value存储的次数
if(a <= in.intValue()){
a = in.intValue();
}
}
System.out.println("50个数字里出现最多次数是"+a);
Set set1 = hashMap.entrySet();
Iterator iter1 = set1.iterator();
while(iter1.hasNext()){
Map.Entry entry = (Map.Entry)iter1.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
if(a == value.intValue()){
System.out.println("统计出现最大次数的数字值:"+key);
}
}
方式三:利用TreeMap的特性
/**
* TreeMap 随机生成50个数
*/
public static void main(String[] args) {
int[] a = RandomTest.getRandomNum();
Map map = new TreeMap();
//Collections的max方法 返回出现次数的集合collection
for(int i=0;i<a.length;i++){
if(map.get(a[i]) == null){//如果map不存在随机数,则存入value
map.put(a[i], new Integer(1));
}else{如果map存在随机数,则value值自增
Integer in = (Integer)map.get(a[i]);
map.put(a[i], new Integer(in.intValue()+1));
}
}
System.out.println(map);
System.out.println("遍历map里面的数据获取出现次数最多的数字");
Collection colls = map.values();//先将map中的value值存入collection集合中,方便调用max方法返回最大值
Integer maxInt = (Integer)Collections.max(colls);//根据元素的自然顺序,返回给定 collection 的最大元素
List list =new ArrayList();//用来存放最大次数的key值
Set set = map.entrySet();
for(Iterator iter = set.iterator();iter.hasNext();){
Map.Entry entry = (Map.Entry)iter.next();
Integer value = (Integer)entry.getValue();
if(maxInt.intValue() == value.intValue() ){
list.add((Integer)entry.getKey());
}
}
System.out.println("出现的最多次数是:"+maxInt);
for(Iterator iters = list.iterator();iters.hasNext();){
System.out.println("出现次数最多的数字是:"+iters.next());
}
}