[英]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开始,您应该没问题。
当i
为0
, i-1
为-1
无效索引。 我认为您希望list
的值成为numbers
索引。 此外,对于长度为44
的数组,有效索引从0
到43
。 尝试使用长度为45
的数组,以便您具有从0
到44
有效索引。
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.