当前位置: 首页 > 编程语言 > Java > 正文

Java编程那些事儿47—数组使用示例3

时间:2010-03-07 csdn 陈跃峰

6.3.7 数字统计

要求:统计一个整数中出现最多的数字。如果数字个数一样,则以最大的数字为准,例如1输出1,121输出1,23231输出3。

该题是一个综合的题目,在实际分析时可以分解成三个问题:1、把整数中的每个数字拆分出来,2、统计拆分出的数字中0-9每个的个数,3、获得数字个数的最大值。

实现思路:

1、拆分数字:整数和10取余可以获得该整数的个位值,然后用该整数除以10可以去掉个位(整数除法),按照这种结构实现循环,并把拆分出的数字(也就是余数)存储到数组中。

2、统计数字:声明一个长度是10的整型数组,使用这个数组中的第一个元素保存数字0出现的次数,第二个元素保存数字1出现的次数,依次类推。使用循环实现数字个数的统计。

3、获得最大值对应的数字:获得个数数组中最大值的下标,就是需要的数字。

则实现的代码如下:

int m = 1232312;
int[] n = new int[10]; //存储拆分后的数字
int num = 0;//存储拆分出的数字个数
while(m != 0){ //未拆分完
 n[num] = m % 10;  //获得个位数字
 num++;   //拆分出的数字个数加1
 m /= 10;  //去掉拆分出的数字
}
int[] count = new int[10];//存储0-9数字出现的次数
//统计数字出现的次数
for(int i = 0;i < num;i++){
 count[n[i]]++;
}
//获得最大值的下标
int index = 0;
for(int i = 0;i < count.length;i++){
 if(count[index] <= count[i]){
  index = i;
 }
}
//输出
System.out.println(index);

在该代码中,拆分的十进制的数字,首先拆分出个位,并存储到n数组中,然后通过除10去掉拆分出的数字,继续执行循环,一直运算到m为0时为止,变量num保存拆分出的数字的个数。使用数组count记忆0-9每个数字出现的次数,count[0]存储0出现的次数,count[1]存储1出现的次数,依次类推,所以当n[i]的值为几时,只需要count[n[i]]增加1即可。最后使用循环获得最大数字的下标,适用<=进行比较,可以保证当个数相同时取后续的数字,这样就可以通过循环获得最大数值的下标,按照数组count的结构,数组的下标和就是数字的值。