繁体   English   中英

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

[英]Finding how many times an item Appears in an Array

给定一个从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之间的数字的数组list,然后测试该数字是否小于45,使其成为我感兴趣的数字,例如整数是否为7它将使numbers[6]增加numbers[6]是数字数组,count是该数组中有多少个总数。 我不断收到ArrayIndexOutOfBoundsException。 我该如何解决这个问题?

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

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

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

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

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

如果您的初始值小于45,它将为数字[i-1]加1。 但是,由于您从i = 0开始,它会尝试将number [-1]处的值加1,这在数组定律中是不存在的。 将i更改为从1开始,您应该没问题。

i0i-1-1无效索引。 我认为您希望list的值成为numbers索引。 此外,对于长度为44的数组,有效索引从043 尝试使用长度为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;
}

非常接近,但是有一些索引错误,请记住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");
       }
   }

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM