如何打印1d数组元素的出现次数

时间:2015-01-23 19:01:26

标签: java

我已经解决了这个问题,但我一直有例外。谁能告诉我问题出在哪里?

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});

    }

}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是因为您错误地分配了空间来正确存储您的计数。你需要的是创建一个数组,其中元素的总数是数组的最大,加上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});     
    }    
}