在Java中计算一个整数在数组中出现的次数

3
我试图计算一个大小为6的数组中,数字1到6(包括1和6)的出现次数。我希望返回一个数组,其中每个索引表示该数字出现的次数,但是索引0表示数字1的出现次数。
示例:

输入: [3,2,1,4,5,1,3]
期望输出: [2,1,2,1,1,0].

问题:
下面的代码片段输出[1,1,3,0,1,0]。我应该如何修复它? 我找不到哪里错了。

public static int arrayCount(int[] array, int item) {
    int amt = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] == item) {
            amt++;
        }
    }
    return amt;
}

public int[] countNumOfEachScore(){
    int[] scores = new int[6];
    int[] counts = new int[6];
    for (int i = 0; i < 6; i++){
        scores[i] = dice[i].getValue();
    }
    for (int j = 0; j < 6; j++){
        counts[j] = arrayCount(scores, j+1);
    }
    return counts;
}

dice[]是一个Die对象的数组,它有一个名为getValue()的方法,返回一个介于1到6之间(包括1和6)的整数。counts[]是错误内容的int数组。


1
为什么不使用Collections.frequency()来获取每个数组元素的计数? - mhasan
你的想法非常慢... @mhasan - xenteros
2个回答

4

与其调试您的代码,写另一段代码可能更快。

public static int[] count(int[] array) {
    int[] result = new int[6];
    for (int i = 0; i < array.length; i++) {
        try{
            result[array[i]-1]++;
        } catch (IndexOutOfBoundsException e) {
            throw new IllegalArgumentException("The numbers must be between 1 and 6. Was " + String.valueOf(array[i]));
        }
    }
    return result;
}

上面的代码会得到一个包含6个整数的数组。结果数组中的第i个数字将存储 i+1 出现的次数。
针对OP的PoC: enter image description here

它似乎还是不对。使用输入值[1,2,4,4,3,5]时,它给出了[0,1,3,3,4,4],这是错误的。 - arnbobo
它在我的机器上返回 [1,1,1,2,1,0]。在我的 Java虚拟机 上。 - xenteros
@arnbobo,你能给我展示更多的代码吗?我会尽力帮忙。如果它开始工作了,请随意将其标记为解决方案。 - xenteros
@arnbobo 没问题,我很乐意在未来解决你的问题。请随时在评论中联系我。 - xenteros

-2
public static void main(String [] args){
        int []ar=new int[]{3,2,1,4,5,1,3};
        System.out.println(Arrays.toString(counter(ar)));

    }


public static int[] counter(int []ar){
        int []result=new int [6];
        for(int i=0;i<ar.length;i++){
            int c=0;
            for(int j=0;j<ar.length;j++){
                if(j<i && ar[i]==ar[j])
                    break;
                if(ar[i]==ar[j])
                    c++;
                if(j==ar.length-1){
                    result[i]=c;
                }
            }
        }
        return result;
    }

请检查您所需的输入输出。 - Hasib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接