在我的JAVA代码中,我获得了一个数据,我必须找到该模式。一切都成功编译,每个方法都有效。但是,当我尝试访问该模式时,我的终端窗口中出现java.lang.ArrayIndexOutOfBoundsException: 987
。突出显示的部分采用以下方法,这是我的最大方法之一。顺便说一下,数据数组只是int []
数据。
public int maxOfData(int [] oa)
{
int max = oa[0];
for (int i = 1; i < size; i++)
{
if (oa[i] > max)
max = oa[i];
}
return max;
}
例外情况在if(oa[i] > max)
模式代码是这样的:
public int[] modeOfData()
{
int[] tally = new int[maxOfData() + 1];
for( int i = 0; i < size; i++)
{
tally[data[i]]++;
}
//max contains frequency of modes
int max = maxOfData (tally);
int count = 0;
for( int i = 0; i < tally.length; i++)
{
if( tally[i] == max )
count++;
}
//count occurence of maxValue in tally (for)
//that determines how many modes there are
//declare another int called modes
int[] modes = new int[count];
//size of array should be count
//loop through tally and extract modes: it's the index value.
int pos = 0;
for( int i = 0; i < tally.length; i++)
{
if(tally[i] == count)
modes[pos++] = i;
}
return modes;
//modes are where the values are == max
}
data
的其他最大值相同,但data
代替oa
。根据我的老师的说法,我需要两种最大方法,就像那样。那我该怎么办?我该如何解决这个问题?
答案 0 :(得分:1)
我认为该行
for (int i = 1; i < size; i++)
应该是
for (int i = 1; i < oa.length; i++)
答案 1 :(得分:0)
ArrayIndexOutOfBound抛出异常以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。每当迭代一个Array对象时。你需要迭代,同时检查索引总是小于其长度
例如,
for(int i=1;i<array.length;i++){
//access array content in ith position
System.out.println(array[i]);
}
您的size变量具有非法数组索引的值。这就是问题
答案 2 :(得分:0)
查看存储为大小的数字,然后检查您宣布的oa[]
大小。如果尺寸大于oa[]
的尺寸,则表示您遇到问题。
答案 3 :(得分:0)
问题在于这部分代码
int max = oa[0];
for (int i = 1; i < size; i++)
{
if (oa[i] > max)
max = oa[i];
}
使用适当的检查重写方法maxOfData(int [] oa)
public int maxOfData(int[] oa) {
if (oa == null) {
throw new IllegalArgumentException("Input array is null");
}
int max=oa[0];
for (int i = 1; i < oa.length; i++) {
if (oa[i] > max)
max = oa[i];
}
return max;
}
如果输入数组为null,则不应处理它。