Java 我需要一个数组来打印所有的数字并计算它们的出现次数

Java 我需要一个数组来打印所有的数字并计算它们的出现次数,java,arrays,count,Java,Arrays,Count,我有一个包含数字(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++

我有一个包含数字(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);

            }
        }
    }
intmin=2;
int max=12;
int m=0;

对于Java8中的(int i=min;i),有一个简单的解决方案,尽管它可能不是最好的,但从性能角度来看:

Arrays.stream(array)
      .collect(Collectors.groupingBy(s -> s))
      .forEach((k, v) -> System.out.println(k+" "+v.size()));
ArrayList引用=新建ArrayList();
对于(int i=0;i

此事件列表现在包含事件;请尝试一下。

我将尝试解释我自己,对于“扫描”数组的最小值和最大值之间的每个数字,如果找到该数字,请在计数器中添加1。 “扫描”完成后,打印计数器,重置计数器,并继续到最小值和最大值之间的下一个值

我相信这就是你试图做的:

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;
        }
    }
intmin=2;
int max=12;
int m=0;
int y[]={2,2,2,4,5,9,9,11,11,12};

对于(int i=min;i)您不需要双重嵌套循环。只需对数组排序并查找连续字符。这样会更好。您能解释一下代码部分是如何工作的吗?当您说需要打印最小值和最大值之间的所有字符时,您是否打算排除最小/最大值重复?除此之外,您真的打算这样做吗要对整个数组执行此操作吗?如果数组太大,您的手上可能会有相当多的print语句。为什么不设置此方法来计算数组中某个数字x的实例?因此它需要是最小值和最大值之间的每个数字,并且最小值和最大值都包含在内。让我们直接假设一下:您正在处理的数组是否为我不认为给出这些代码会有任何帮助。是的,我不能使用这些代码,因为我需要在考试的纸上做这些,但是谢谢你的帮助help@KickButtowski:我不知道你怎么能这么说,关于OP最初提供的一些信息。这可能会有帮助。@Neumann我刚才表达了什么我相信我没有投你反对票。我真的很喜欢你的方法,但至少一些解释不会害死任何人。如果你看到我的答案,我有很多答案。:)这绝对是一个更接近实际情况的解决方案。你能详细说明一下为什么这是正确的吗?在我看来,他试图做的是对最小值和最大值之间的每个数字扫描数组并计算数字出现的次数:)我的意思是在答案中解释它。这实际上是一个非常好的答案,但主要是代码;我强烈建议您解释此解决方案的工作原理,不仅因为它有助于OP更好地理解,还因为其他人可能会遇到此问题。只给他们一块代码会适得其反ve@Makoto我只是想知道为什么这个问题没有被更多的人标记,因为op只是在寻找一个代码答案?!@Seiran最好指出双for循环的性能很差,这是n^2
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;
        }
    }