问题描述:
随机生成50个数字(整数),每个数字的范围是[10, 50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。
1.用数组实现
import java.util.Random;
public class RandomTest1
{
public static void main(String[] args)
{
int a ;
int[] count = new int[41];
/*
* 第一种方式生成随机数
*/
/*Random r = new Random();
for (int i = 0; i < 50; i++)
{
a = r.nextInt(41) + 10;// a每次存储随机生成的数,范围是【10,50】
count[a - 10]++;// 对刚随机生成的数,累计次数。由于数组下标的开始限定,故减去 10
}*/
/*
* 第二种方式生成随机数
*/
for(int i = 0; i < 50; i++)
{
a = (int)(Math.random()*41) + 10;
count[a - 10]++;
}
for (int i = 0; i < 41; i++)//按数字自然顺序输出每个数字及次数。
{
if (0 == count[i])
{
continue;
}
System.out.println((i + 10) +" appeared " + count[i] + " times");
}
int max = count[0];
for (int i = 0; i < 41; i++)
{
if (max < count[i])
{
max = count[i];
}
}
System.out.println("The most times of those numbers are "+ max );
System.out.println("The number appeared most times as follows:");
for (int i = 0; i < 41; i++)
{
if (max == count[i])
{
System.out.println(10 + i );
}
}
}
}
2.用集合实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
public class RandomTest2
{
public static void main(String[] args)
{
Random r = new Random();
TreeMap map = new TreeMap();//key存放的是数字,value存放的是数字出现的次数
for(int i = 0; i < 50; i++)
{
int number = r.nextInt(41) + 10;//随机生成数字,范围在【10, 50】之间。
Integer key = new Integer(number);
if(map.get(key) == null)//如果数字第一次生成,key就赋值为该数字,value赋值为1
{
map.put(key, new Integer(1));
}
else//否则,数字多次出现,key仍赋值为该数字,但是value应在原有的次数上增加一次。
{
int value = ((Integer) (map.get(key))).intValue();
map.put(key, new Integer(value + 1));
}
}
int max = Collections.max(map.values());//统计出现次数最多的数字次数
ArrayList list = new ArrayList();//存放出现次数最多的数字
/*
* 遍历TreeMap的第一种方式。entrySet方法保存了键值对构成的set集合
*/
Set set = map.entrySet();
for(Iterator it = set.iterator();it.hasNext();)//统计每个数字出现的次数
{
Map.Entry entry =(Map.Entry) it.next();
int key = ((Integer) entry.getKey()).intValue();
int value = ((Integer)entry.getValue()).intValue();
if(value == max)
{
list.add(key);
}
System.out.println(key + " appeared " +value + " times");
}
/*
* 遍历TreeMap的第二种方式。keySet方法保存了键构成的set集合。Values方法保存了值构成的collection集合(可重复)。get(key)方法就是通过键可以获取值。
*/
/*Set set = map.keySet();
for(Iterator it = set.iterator(); it.hasNext(); )
{
int key = ((Integer)it.next()).intValue();
int value = ((Integer) map.get(key)).intValue();
System.out.println(key + " : " + value);
}*/
System.out.println("The most times of those numbers are "+ max );
System.out.println("The number appeared most times as follows:");
for(Iterator it = list.iterator(); it.hasNext();)//统计出现次数最多的数字
{
System.out.println(it.next());
}
}
}