额,楼上敲的比我快。。。
public class Test {
public static void main(String[] args) throws IOException {
System.out.println("请输入一个字符串:");//提示输入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));// 定义键盘输入
String str = bufr.readLine(); // 定义String接收输入的随机字符串
int count = 0; // 定义计数器
Random random = new Random(); // 创建随机对象
TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
// 创建Map集合,用来存放字符与出现次数的映射关系
for (int i = 0; i < str.length(); i++) {
String string = String.valueOf(str.charAt(i));
Integer value = tm.get(string);
if (value != null) // 以字符作为键判断集合中此键是否存在对应的值
count = value; // 如果存在,就用计数器获取这个键的值
count++; // 计数器加1
tm.put(string, count); // 将新的映射存入集合
count = 0; // 计数器归零
}
System.out.println("原集合是:字母 = 出现次数");
System.out.println(tm); // 输出集合
Integer max = 0; // 定义计数器,获取key出现的次数
String key = null; // 定义变量,记录出现次数最多的字符
//将tm集合的映射关系返回到Set集合以便取出操作
Set<Map.Entry<String, Integer>> entrySet = tm.entrySet();
for (Map.Entry<String, Integer> me : entrySet)
//遍历集合,寻找出现次数最多的字字符
if (me.getValue() > max) {
max = me.getValue();
key = me.getKey();
} else if (me.getValue() > max) {
if (me.getKey().compareTo(key) > 0)
key = me.getKey();
}
System.out.println("出现次数最多的字符是:" + key + ",它出现了" + max + "次");
}
}
算法步骤是:1、让用户输入一个随机的字符串
2、把这个字符串的每个字符作为key,出现的次数作为value,存入map集合中。
那么,存放之前,就要判断这个字符是否已经存在集合中了,如果不存在,就直接将字符作为key,value为1存入;
如果已经存在,就取出原来的value加1以后存入
3、讲map的键值关系返回到一个set。
4、遍历set,找出value最大,也就是出现次数最多的字符,如果有两个字符出现次数一样,就取较大的字符
5、输出结果
求个采纳哦。。。