-1

在我的 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. 据我的老师说,我需要两种最大方法,就像那样。那我该怎么办?我该如何解决?

4

4 回答 4

1

我认为这条线

for (int i = 1; i < size; i++)

应该

for (int i = 1; i < oa.length; i++)
于 2013-11-15T05:56:41.513 回答
0

查看存储到 size 中的数字,然后检查您声明oa[]的大小。如果尺寸大于尺寸,oa[]那么你就有问题了。

于 2013-11-15T05:59:53.200 回答
0

ArrayIndexOutOfBound 抛出异常以指示使用非法索引访问了数组。索引为负数或大于或等于数组的大小。每当您迭代 Array 对象时。您需要在检查索引始终小于其长度时进行迭代

例如,

    for(int i=1;i<array.length;i++){
    //access array content in ith position
    System.out.println(array[i]);
    }

您的 size 变量具有非法数组索引的值。那就是问题所在

于 2013-11-15T05:57:18.480 回答
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;
}

如果输入数组为空,则不应处理它。

于 2013-11-15T06:06:56.107 回答