您好我想在int []数组中显示数字的出现次数。我发现许多人试图提出类似的问题,但他们的数组是String。这是我的工作从10-25中挑选10个随机数并打印100次,显示数字的出现次数。例如:
12 15 16 17 20 14 24 21 22 15 10 12 16 24 23 14 23 12 11 10
10的频率是:2 频率为11:1 频率为12:3 等等
public void pickRandomNo(int[] a) {
printHeader();
Random randomGenerator = new Random();
for (int row = 0; row < 9; row++) {
for (int i = 0; i < 10; i++) {
array[i] = 10 + randomGenerator.nextInt((25 - 10) + 1);
System.out.print(array[i] + " ");
} System.out.println("");
}
}
public void displayOccurences() {
ArrayList arrlist = new ArrayList();
arrlist.add(array);
int freq = Collections.frequency(arrlist, 10);
System.out.println("Frequency of 10 is: " + freq);
}
答案 0 :(得分:3)
嗯,对于你可以做的displayOccurences
方法:
int freq = Collections.frequency(Arrays.asList(array), 10);
或者你可以用老式的方式进行迭代:
int freq = 0;
for(final int v : array)
if(v == 10)
freq++;
或者如果你使用的是Java 8,你可以试试这样的东西:
int freq = Arrays.asList(array).stream().filter(i -> i.equals(10) || i == 10).count();
答案 1 :(得分:0)
基于Guava MultiSet的解决方案:
HashMultiset<Integer> ms = HashMultiset.create();
for(int i : a) {
ms.add(i);
}
for(Entry<Integer> e : ms.entrySet()) {
System.out.println(e.getElement() + " - " + e.getCount());
}
答案 2 :(得分:0)
您希望确定计算数组的整个范围。我有一个类似的问题,我在一个非常大的ArrayList中显示每个温度的所有出现我使用这个静态方法来显示一个表。
public static void displayOccurances(ArrayList<Integer> tempsList){
// get min and max for looping
int i = Collections.min(tempsList);
int maxTemp = Collections.max(tempsList);
// Table Headings
System.out.println("Frequency of each teperature");
System.out.printf("%4s%9s%n", "TEMP", "COUNT");
System.out.printf("%4s%9s%n", "====", "=====");
// Loop through arraylist to display occurrences
while (i <= maxTemp) {
System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));
i++;
}
}
我会在这里为你重构一个通用数组。
public static void displayOccurances(Integer[] array){
// get min and max for looping
int i = Collections.min(array);
int maxInt = Collections.max(array);
// Table Headings
System.out.println("Frequency of each Integer");
System.out.printf("%3s%9s%n", "INT", "COUNT");
System.out.printf("%3s%9s%n", "===", "=====");
// Loop through array to display occurrences
while (i <= maxInt) {
System.out.printf("%3s%9s%n", i, Collections.frequency(array, i));
i++;
}
}
这是我的第一个答案,很抱歉,如果我的代码没有正确显示。
我们的想法是使用Java Collections Class(您需要导入)来识别出现最高和最低出现次数。从低范围开始,再次使用Collections Class检查出现次数范围内的每个整数。
如果你不想显示0次出现,只需在循环内放一个if,就像这样
// Loop through arraylist to display occurances
while (i <= maxTemp) {
if (Collections.frequency(tempsList, i) > 0){
System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));
}
i++;
}