给定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。我该如何解决这个问题?
答案 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)
当i
为0
时,i-1
为-1
- 无效索引。我认为您希望list
的值成为numbers
的索引。此外,对于长度为0
的数组,有效索引从43
到44
运行。尝试一个长度为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;
}
答案 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");
}
}