JAVA语言输出数组中出现频率高的数例如[1,1,2,3,3]输出1和3

如题所述

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.swing.JOptionPane;

public class Test88 {
public static void main(String[] args) {
int[] ss = { 1,3,2,5,2,5,7};
Map map = new HashMap();

for (int i = 0; i < ss.length; i++) {
int count = 0;
for (int j = 0; j < ss.length; j++) {
if (ss[i] == (ss[j])) {
count = count + 1;
}
}
// 为了不打印重复的,放入map中去掉重复的
map.put(ss[i], count);
}

// 遍历map,打印包含的数字和个数
Set key = map.keySet();
int k = key.size();
int ii[] = new int[k];// 存放出现次数最多的
k = 0;
int temp = 0;// 比较的时候的中间量
int temp2 = 0;
for (Iterator iterator = key.iterator(); iterator.hasNext();) {
int name = Integer.parseInt(iterator.next().toString());
int count2 = Integer.parseInt(map.get(name).toString());
if (temp < count2) {
temp = count2;

}
System.out.println(name + "出现 " + count2 + " 次");
}

for (Iterator iterator = key.iterator(); iterator.hasNext();) {
int name = Integer.parseInt(iterator.next().toString());
int count2 = Integer.parseInt(map.get(name).toString());
if (temp == count2) {
ii[k]=name;
k++;
}
}

System.out.print("出现最多的是:");
for (int i = 0; i < ii.length; i++) {
if (ii[i] != 0) {
System.out.print(ii[i] + " ");
}

}
}
}

数组的数字可以随意填写,其中第一次for的遍历是得到出现的数字最多的次数,第2次for的遍历是和这个次数比较,因为已经是最多的了,所以只要和这个相等,那个元素也就是出现最多的了,即使有出现次数同样最多的也可以保存
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-17
比较麻烦,可你讲一下思路吧,for循环长度自然是数组的长度了!两层,得到第一个数的时候不用执行内层循环,外层循环第二次的时候,也就是拿到数组的第二个数,那他和以前的数进行比较,这就是内层循环了,然后如果相同就++,把变量放入一个数组了,还把出现次数也放入数组,这个地方需要定义个二维的了,第一维放的是不同的数,也就是1、2、3,第二位放出现的次数,也就是2、1、2,然后按第二维的大小,进排序,然输出一维就可以了,因为有相同最多的出现次数,所以在你排好序后需要在做一下判断了!