码迷,mamicode.com
首页 > 其他好文 > 详细

随机数字统计

时间:2014-09-23 19:06:15      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:blog   io   使用   java   ar   for   div   sp   cti   

要求:

  随机生成50个数字(整数),每个数字的范围是[10, 50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出 来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。

版本一:(使用数组实现)

import java.util.Random;

public class HomeWork
{
	public static void main(String[] args)
	{
		int[] count = new int[50];//统计每个数字出现的次数
		for(int i=0; i<50; i++)
		{
			int number = new Random().nextInt(41) + 10;//生成[10,50]之间的随机数
			count[number-10]++;	//充分利用数组下标提供的信息,利用下标信息得到具体的数字,而数组里面的值代表具体的数字出现的次数,这样,一个数组就搞定了两方面的需求。例如,count[0],count[1]分别代表10和11出现的次数,依次类推...						
		}
		
		for(int i=0; i<count.length; i++)
		{
			if(count[i] != 0)
			{
				System.out.println((i+10)+"出现的次数是:"+count[i]);
			}
		}
		
		int max = count[0];
		for(int i=0; i<count.length; i++)//找到那个最大的次数
		{
			if(count[i] > max)
			{
				max = count[i];
			}
		}
		
		for(int i=0; i<count.length; i++)
		{
			if(count[i] == max)
			{
				System.out.println("出现次数最多的数字是:"+(i+10)+",次数是:"+count[i]);
			}
		}	
	}
}
/*
在Eclipse中的输出结果是:
	12出现的次数是:1
	13出现的次数是:3
	14出现的次数是:3
	15出现的次数是:1
	16出现的次数是:3
	17出现的次数是:1
	20出现的次数是:1
	22出现的次数是:4
	23出现的次数是:3
	24出现的次数是:4
	27出现的次数是:1
	28出现的次数是:1
	29出现的次数是:2
	30出现的次数是:2
	31出现的次数是:2
	32出现的次数是:1
	33出现的次数是:1
	34出现的次数是:1
	37出现的次数是:3
	43出现的次数是:2
	46出现的次数是:2
	48出现的次数是:3
	49出现的次数是:1
	50出现的次数是:4
	出现次数最多的数字是:22,次数是:4
	出现次数最多的数字是:24,次数是:4
	出现次数最多的数字是:50,次数是:4
*/

版本二:(使用集合实现)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;

public class HomeWorkStd
{
	public static void main(String[] args)
	{
		Map map = new TreeMap();//存储数字及其出现的次数(key为数字,value数字为出现的次数)尝试HashMap map
		Random random = new Random();
	
		for(int i=0; i<50; i++)
		{
			int number = random.nextInt(41) + 10;
			Integer in = new Integer(number);
			if(map.get(in) == null)
			{
				map.put(in, new Integer(1));
			}
			else
			{
				int value = ((Integer)map.get(in)).intValue();
				map.put(in, new Integer(value + 1));
			}
		}
		
		Collection col = map.values();
		Integer maxOccurs = (Integer)Collections.max(col);//可以自己实现找到最大次数,但是尽量用jdk提供的,因为其效率大部分情况下可能比自己写的要高。
		
		Set set = map.entrySet();
		List list = new ArrayList();//存储出现次数最大的数字
		
		for(Iterator iter=set.iterator(); iter.hasNext();)
		{
			Map.Entry entry = (Map.Entry)iter.next();
			
			Integer key = (Integer)entry.getKey();
			Integer value = (Integer)entry.getValue();
			
			if(value.intValue() == maxOccurs.intValue())
			{
				list.add(key);
			}
			
			System.out.println(key + ":" + value);
		}
		
		System.out.println("出现最多次数为" + maxOccurs);
		
		System.out.println("这些数字分别是:");
		for(Iterator iter=list.iterator(); iter.hasNext();)
		{
			System.out.println(iter.next());
		}
		
		/*另一种方式
 		//找到最大的次数(自己实现)
		Collection coll = map.values();
		int max = 0;//假设最大的次数为零
		for(Iterator iter = coll.iterator(); iter.hasNext();)
		{
			Integer value = (Integer)iter.next();
			if(value.intValue() > max)
				max = value.intValue();
		}
		//输出出现次数最多的数
		Set set = map.keySet();
		for(Iterator iter = set.iterator(); iter.hasNext();)
		{
			Integer key = (Integer)iter.next(); 
			if(((Integer)map.get(key)).intValue() == max)
			{
				System.out.println("出现次数最多的数有:" + key + ",次数为:" + max);
			}
		}
		*/
	}
}

版本三:(简化版,使用集合,利用泛型、自动装箱/拆箱技术)

import java.util.Collection;
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 StatisticRandomNumber
{
	public static void main(String[] args)
	{
		TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
		
		Random random = new Random();
		int temp;
		for(int i=0; i<50; i++)
		{
			temp = random.nextInt(41) + 10;
			if(map.get(temp) == null)
				map.put(temp, 1);
			else 
				map.put(temp, map.get(temp) + 1);
		}
		
		Set<Map.Entry<Integer, Integer>> mapSet = map.entrySet();
		for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();)
		{
			Map.Entry<Integer, Integer> entry = iter.next();
			System.out.println("Key:" + entry.getKey() + ", Value:" + entry.getValue());
		}
		
		Collection<Integer> col = map.values();
		int maxValue = Collections.max(col);
		System.out.println("出现最多次数为:" + maxValue);
		System.out.println("这些数字有:");
		for(Iterator<Map.Entry<Integer, Integer>> iter=mapSet.iterator(); iter.hasNext();)
		{
			Map.Entry<Integer, Integer> entry = iter.next();
			if(entry.getValue() == maxValue)
			{
				System.out.println(entry.getKey());
			}
		}

	}
}

 

随机数字统计

标签:blog   io   使用   java   ar   for   div   sp   cti   

原文地址:http://www.cnblogs.com/xpjiang/p/3988547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!