查找项目在数组中出现的次数

时间:2014-03-14 20:35:09

标签: java arrays if-statement for-loop

给定1到60之间的整数数组,我试图找出数字1-44出现在数组中的次数。这是我的方法

public static void mostPopular(int[] list, int count)
    {
        int[] numbers;
        numbers = new int[44];
        for (int i = 0; i<count;i++)
        {
            if (list[i]<45 )
            {
                numbers[i-1]=numbers[i-1]+1; //error here
            }
        }
        for (int k=0; k<44;k++)
        {
            System.out.println("Number " + k + " occurs " + numbers[k-1]+ "times");
        }
    }

我试图遍历数组,列表,其中包含超过5000个介于1-60之间的数字,然后测试该数字是否小于45,使其成为我感兴趣的数字,然后如果整数是7,例如它会增加numbers[6]乘1. list是数字数组,count是数组中的总数。我一直得到一个ArrayIndexOutOfBoundsException。我该如何解决这个问题?

6 个答案:

答案 0 :(得分:1)

替换此行numbers[i-1]=numbers[i-1]+1;

numbers[list[i] - 1] = numbers[list[i] - 1] + 1;

现在它将更新正确元素的数量。

答案 1 :(得分:0)

您需要增加numbers[list[i]],因为这是您的小于45的值。我上升到5000而您的数组numbers太小了。

您应该真正开始使用调试器。所有现代IDE都支持它(Eclipse,IntelliJ,Netbeans等)。使用调试器,您可以很快意识到错误。

答案 2 :(得分:0)

如果您的初始值小于45,则会将数字[i-1]加1。但是,由于您从i = 0开始,它将尝试将1添加到位于数字[-1]的值,这在数组定律中是不存在的。改变我从1开始,你应该没事。

答案 3 :(得分:0)

i0时,i-1-1 - 无效索引。我认为您希望list的值成为numbers的索引。此外,对于长度为0的数组,有效索引从4344运行。尝试一个长度为45的数组,因此您有044的有效索引。

numbers = new int[45];

if (list[i] < 45)
{
    // Use the value of `list` as an index into `numbers`.
    numbers[list[i]] = numbers[list[i]] + 1;
}

答案 4 :(得分:0)

非常接近,但有一些索引错误,请记住0-1 = -1,这不是一个可用的索引。此外,这不是c,因此您可以调用list.length来获取列表的大小。 试试这个(你可以忽略mostPopular方法之外的东西):

class Tester{

   public static void main(String args[]){
       int[] list = new int[1000];
       Random random = new Random();
       for(int i=0; i<list.length; i++){
           list[i] = random.nextInt(60) + 1;
       }
       mostPopular(list);
   }

   public static void mostPopular(int[] list)
   {
       int[] numbers = new int[44];
       for (int i = 0; i< list.length ;i++)
       {
           int currentInt = list[i];

           if(currentInt<45 )
           {
               numbers[currentInt - 1] = (numbers[currentInt -1] + 1);
           }
       }
       for (int k=0; k<numbers.length; k++)
       {
           System.out.println("Number " + (k+1) + " occurs " + numbers[k]+ "times");
       }
   }

}

答案 5 :(得分:0)

numbers[i-1]=numbers[i-1]+1; //error here 

更改为

numbers[list[i]-1] += 1; 

list[i]-1因为number[0]存储了1的频率,等等。

我们增加相应的数组元素,其索引等于列表值减去1

public static void mostPopular(int[] list, int count)
{
    int[] numbers = new int[44];
    for (int i = 0; i<count;i++)
    {
        //in case your list value has value less than 1
        if ( (list[i]<45) && (list[i]>0) )
        {
            //resolve error
            numbers[list[i]-1] += 1; 
        }
    }
    //k should start from 1 but not 0 because we don't have index of -1
    //k < 44 change to k <= 44 because now our index is 0 to 43 with [k-1]
    for (int k=1; k <= 44;k++)
    {
        System.out.println("Number " + k + " occurs " + numbers[k-1]+ "times");
    }
}