我有一个数字(2,2,2,2,4,5,9,9,11,11,12)的数组,我需要控制台打印出最小和最大之间的所有数字并计算它们的发生。即。数字2出现4次,数字3出现0次,数字4出现1次。
我有半工作但印刷太多了。我理解为什么但不知道如何以另一种方式做到这一点。
int min = 2;
int max = 12;
int m=0;
for(int i=min;i<=max;i++){
for(int j=0;j<y.length;j++){
if(y[j]==i){
m+=1;
}
else{
if(m>=1){
System.out.println(i+" "+m);
m=0;
break;
}
System.out.println(i+" "+m);
}
}
}
答案 0 :(得分:1)
我将尝试解释自己,对于每个最小值和最大值之间的数字,扫描&#34;数组,如果找到数字,则向计数器添加1。 在&#34;扫描&#34;完成打印计数器,重置计数器并继续到最小值和最大值之间的下一个值
我相信这是你试图做的事情:
int min = 2;
int max = 12;
int m = 0;
int y[] = { 2, 2, 2, 2, 4, 5, 9, 9, 11, 11, 12 };
for (int i = min; i <= max; i++) {
for (int j = 0; j < y.length; j++) {
if (y[j] == i)
m += 1;
}
System.out.println(i + " " + m);
m=0;
}
}
答案 1 :(得分:0)
ArrayList<Integer> occurrence = new ArrayList<Integer>();
for (int i = 0; i < myarray.legnth; i++) {
int a = 0;
for (int j = 0; j < max; j++) {
if (myarray[i] == j) {
a++;
}
}
occurrence.add(a);
}
此事件列表现在包含事件;试一试。
答案 2 :(得分:-1)
在Java8中有一个简单的解决方案,即使它可能不是最好的,但在性能方面:
Arrays.stream(array)
.collect(Collectors.groupingBy(s -> s))
.forEach((k, v) -> System.out.println(k+" "+v.size()));