Arrays 员额增量

Arrays 员额增量,arrays,increment,Arrays,Increment,我一直在复习我在java方面的老作品,在互联网上寻找答案,但我找不到我需要的东西。我有一个有序数组,它将值输入到方法countoccurrence(int[]list)中。我了解阵列的工作原理,但我的问题是:; 阵列如何在不创建重复项的情况下继续计数中的下一个数字 阵列如何能够跳过重复项并一直移动到最后,而不逐个检查所有重复项 这是代码 public static void Calculations(){ Scanner in = new Scanner(System.in);

我一直在复习我在java方面的老作品,在互联网上寻找答案,但我找不到我需要的东西。我有一个有序数组,它将值输入到方法countoccurrence(int[]list)中。我了解阵列的工作原理,但我的问题是:; 阵列如何在不创建重复项的情况下继续计数中的下一个数字

阵列如何能够跳过重复项并一直移动到最后,而不逐个检查所有重复项

这是代码

public static void Calculations(){
    Scanner in = new Scanner(System.in);
    int[] values = {1, 2, 2, 2, 2, 3};

    countOccurence(values);
}

public static void countOccurence(int[] list) {
    //12 23 45 56 56 0
    for (int i = 0; i < list.length; i++) {
        int count = 0;
        for (int j = 0; j < list.length ; j++) {
            if (list[j] == i)
                count += 1
        }
        if (count != 0)
            System.out.printf("%d happens %d %s%n",
                    i, count, count > 1 ? "times" : "time");
    }
}
公共静态空隙率计算(){
扫描仪输入=新扫描仪(系统输入);
int[]值={1,2,2,2,3};
计数发生率(数值);
}
公共静态void countoccurrence(int[]列表){
//12 23 45 56 56 0
for(int i=0;i1?“次”:“时间”);
}
}
}

让我们看看这里发生了什么,我相信这是合乎逻辑的 这方面的缺陷,我们将在本答案末尾讨论。:)


i=4
现在,那么
iIs这个程序真的给出了出现的次数吗?如果(list[j]==list[i])
,这不是执行问题的最佳方式,因为结果是这样的。0发生1次1发生4次2发生4次3发生4次4发生4次5发生1次这是通常需要的结果1发生1次2发生4次3发生1次我真正需要知道的是,阵列如何足够智能,不计算其他2,直接跳到I=3。它在一次迭代中用-j遍历了2,然后跳转到-i-(5),根据你关于使用
list[j]==i
而不是
list[j]==list[i]
的解释,那么你为什么要使用外部循环呢?如果您的想法是检查所有的数字,那么外循环退出条件
iI是否理解数组的大小和限制?我关心的是:'outer-loop iteration 2:i=1'和这里的'outer-loop iteration 3:i=2'您还有疑问吗?到目前为止,我得到了答案,我的疑问是,为什么结果不是这样看的:i=1等于j=0,i=2等于j=1,j=2计数=2,i=3等于j=1,j=2计数=2,i=4等于j=3,为什么它在外循环中为迭代i2和i3添加迭代?这就是Im丢失的地方对于外部循环的每次迭代,
j
将完成4次迭代。这是因为
j
每次都重置为
0
。因此,对于外部循环的每次迭代,它将从
j=0
开始运行,并上升到
j=3
public static void Calculations(){
    Scanner in = new Scanner(System.in);
    int[] values = {1, 2, 2, 3}; 
    //reducing few 2s to make the explanation shorter
    countOccurence(values);
}

    public static void countOccurence(int[] list) {
        //12 23 45 56 56 0
        for (int i = 0; i < list.length; i++) {
            int count = 0;
            for (int j = 0; j < list.length ; j++) {
                if (list[j] == i)
                    count += 1
            }
            if (count != 0)
                System.out.printf("%d happens %d %s%n",
                        i, count, count > 1 ? "times" : "time");
        }
    }
    }
Outer-loop iteration 1: i=0
     Inner-loop iteration 1: j=0, list[j]=list[0]=1!=(i=0), count=0
     Inner-loop iteration 2: j=1, list[j]=list[0]=2!=(i=0), count=0
     Inner-loop iteration 3: j=2, list[j]=list[0]=2!=(i=0), count=0
     Inner-loop iteration 4: j=3, list[j]=list[0]=3!=(i=0), count=0
     Print count 0

count=0 again
Outer-loop iteration 2: i=1
     Inner-loop iteration 1: j=0, list[j]=list[0]=1=(i=1), count=1
     Inner-loop iteration 2: j=1, list[j]=list[0]=2!=(i=1), count=1
     Inner-loop iteration 3: j=2, list[j]=list[0]=2!=(i=1), count=1
     Inner-loop iteration 4: j=3, list[j]=list[0]=3!=(i=1), count=1
     Print count 1

count=0 again
Outer-loop iteration 3: i=2
     Inner-loop iteration 1: j=0, list[j]=list[0]=1!=(i=2), count=0
     Inner-loop iteration 2: j=1, list[j]=list[0]=2=(i=2), count=1
     Inner-loop iteration 3: j=2, list[j]=list[0]=2=(i=2), count=2
     Inner-loop iteration 4: j=3, list[j]=list[0]=3!=(i=2), count=2
     Print count 2

count=0 again
Outer-loop iteration 4: i=3
     Inner-loop iteration 1: j=0, list[j]=list[0]=1!=(i=3), count=0
     Inner-loop iteration 2: j=1, list[j]=list[0]=2!=(i=3), count=0
     Inner-loop iteration 3: j=2, list[j]=list[0]=2!=(i=3), count=0
     Inner-loop iteration 4: j=3, list[j]=list[0]=3=(i=3, count=1
     Print count 1