使用java语言,输入一串数字,求,各个数字出现的次数,并按出现次数的大小进行排序。例如,输入次数:1 2 3 4 2 12
输出:2出现次数3,1出现次数2,3出现次数1,4出现次数1
HashMap, key存输入值, value存次数
map.entrySet()转换成list
Collections.sort
然后循环输出
百度好多, 自己找找详细代码
参考:https://www.cnblogs.com/liujinhong/p/6113183.html
参考:https://blog.csdn.net/xifeijian/article/details/46522531
不用Collections.sort可以实现吗?
@tuwosh:
循环map, 用map的key值存到数组里面, 然后可以循环数组冒泡排序;
判断里写 map.get(array[i]) 比较map对应的value值, 然后对应array中的key换位,
可能说的不太明白, 就是数组里存的其实是map的key值,
比如之前冒泡排序是if(array[i] < array[i+1])
现在是if(map.get(array[i]) < map.get(array[i+1]))
判断里面还是不变:
String temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
这样就是把数组中key值的顺序换了, 最后排序完
循环array; 输出map.get(array[i])就是了
@、熙和: 可以了,谢谢!
百度有。 存到map中 输入值做key 次数做value
这种方式实现不了,因为没有办法根据value取到key,你这种方式是根据value排序的
@tuwosh: 可以吧-- 循环取map对象 value一样 就直接去key啊
@凡人修仙迹: 不太明白你说的意思,key对应value,value对应不了key,你要是有方法,麻烦写出来,或者给出链接
下面是使用Java语言编写的解决方案:
import java.util.*;
public class NumberCount {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串数字,以空格分隔:");
String input = scanner.nextLine();
// 将输入的数字字符串切分成数组
String[] numbers = input.split(" ");
// 使用HashMap统计数字出现的次数
Map<String, Integer> countMap = new HashMap<>();
for (String number : numbers) {
if (countMap.containsKey(number)) {
countMap.put(number, countMap.get(number) + 1);
} else {
countMap.put(number, 1);
}
}
// 将Map转换为List,并按照出现次数进行排序
List<Map.Entry<String, Integer>> entryList = new ArrayList<>(countMap.entrySet());
entryList.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
// 输出结果
System.out.println("按出现次数排序的结果:");
for (Map.Entry<String, Integer> entry : entryList) {
System.out.println(entry.getKey() + "出现次数" + entry.getValue());
}
}
}
这个程序首先使用Scanner
类获取用户输入的一串数字,然后使用字符串的split
方法将输入的数字切分成数组。接下来,我们使用HashMap
来统计每个数字出现的次数。遍历数字数组,对于每个数字,如果它在HashMap
中已经存在,则将其对应的次数加1;否则,在HashMap
中添加一个新的键值对,初始次数为1。
然后,我们将HashMap
转换为List
,并使用entryList.sort()
方法根据出现次数进行排序,使用Comparator.reverseOrder()
以降序排序。最后,我们遍历排序后的List
,输出结果。
请注意,此程序假定输入的数字是以空格分隔的。如果你有其他的输入要求,请在提问中说明。