如何打印一维数组元素的出现次数



我已经为此工作过,但我不断收到异常。 谁能告诉我问题出在哪里?

package assingment;
public class frequencyCount {
    static void count(int x[]){
        System.out.println("ENTERED ARRAY IS ");
        for( int i=0; i < x.length; i++)
        {
            System.out.print(x[i]);
        }
        int c[] = new int [x.length];
        for(int i=0; i<c.length ;i++)
        { c[i] = 0;
        }
        for(int i=0; i< x.length ;i++){
            int m= x[i];
            c[m]++;
        }
        System.out.println("frequency table");
        for(int i=0; i< c.length ;i++){
            System.out.print(i + " "+ c[i]);
        }
    }

    public static void main(String[] args) {
            count(new int []{1,1,5,2,10});
    }
}

这是因为您错误地分配了空间以正确存储计数。 您需要创建一个数组,其中元素总数是数组的最大值,加上 1 占 0。 我将假设你所有的数字都是正数,以使事情变得简单。 因此,您实际上需要首先确定数组中的最大值是多少,然后相应地分配空间。

如果不这样做,当您在数组中指定 5 的值时,您只分配了一个大小为 5 的数组,因此如果您尝试使用 5 索引到数组中,则当您尝试访问数组的第六个位置时,您会得到一个OutOfBounds异常,那里不存在。

FWIW,有更聪明的方法可以做到这一点,例如使用 HashMap ,但我假设您还没有在 Java 课程中涵盖更高级的数据结构,您可能需要一个带有数组的解决方案。 但是,我完全建议使用HashMap

因此,请先修改代码以找到最大值,然后相应地分配:

package assingment;
public class frequencyCount {
    static void count(int x[]){
        System.out.println("ENTERED ARRAY IS ");
        // NEW - To store maximum
        int maxi = -1;
        for( int i=0; i < x.length; i++)
        {
            System.out.println(x[i]);
            // Keep checking for the maximum
            if (x[i] > maxi)
                maxi = x[i];
        }        
        // NEW - modify length to account for maximum
        int c[] = new int [maxi+1];
        for(int i=0; i<c.length ;i++)
        { 
            c[i] = 0;
        }
        for(int i=0; i< x.length ;i++){
            int m= x[i];
            c[m]++;
        }
        System.out.println("frequency table");
        for(int i=0; i< c.length ;i++){         
            System.out.println(i + " "+ c[i]);          
        }        
    }
    public static void main(String[] args) {
        count(new int []{1,1,5,2,10});     
    }    
}

您正在尝试访问c[m] m=x[i]第 3 周期的位置。但是x[2]=5c[5]会导致异常,因为c[]中只有 5 个元素(从 c[0]c[4]

最新更新