为什么我得到一个超出范围的数组索引异常?

时间:2011-12-09 07:08:48

标签: java arrays

基本上,我有一项任务要求我找到一组给定数字的模式。

  

这是我的方法:

 public void findMode (){
  /* The vector data is analyzed and transferred into a smaller vector
    smallList (0..100).  For each occurrence of n in vector data,
    smallList[n] is incremented +1.  function Largest is then called
    to find the largest quantity in vector smallList.  The mode(s)
    is/are printed out. */

    int loop, largest;
    int[] smallList = new int[101];    
    for (int i = 0; i < myHowMany; i++)
    {
        smallList[myData[i]]++;
    }
    int max = 0;
    for (int i = 0; i < smallList.length; i++)
    {
        if (max < smallList[i]) 
        {
            max = smallList[i];
        }
    }
//Max is 26
    int size = 0;
    for (int i = 0; i < smallList.length; i++)
    {
        if (i == max) size++;
    }

    int[] modes = new int[size];
    int modeIndex = 0;
    for (int i = 0; i < smallList.length; i++)
    {
        if (smallList[i] == max) 
        {
            modes[modeIndex] = smallList[i];
            System.out.println(modes[modeIndex]);
            modeIndex++;
        }
    } Everything compiles fine, but when I run this method, I get an out of bounds array method. I have no idea WHY this happens so I
     

需要知道社区是否可以帮助我

。 解决!

请告诉我是否需要更多信息!

编辑:我忘了提到我在这里收到错误:

modes[modeIndex] = smallList[i];

新问题: 我修复了之前的问题,但是现在,我发现我的最大数据进入数组,因此模式= 26(最大)

3 个答案:

答案 0 :(得分:2)

您的错误就在这一行

if (i == max) size++;

应该是

if (smallList[i] == max) size++;

这导致modes的大小错误

答案 1 :(得分:1)

这应该足够清楚:modeIndex或i超出了数组大小。由于你使用smallList.length循环遍历smallList,我猜错误是在modeIndex中。在这种情况下,size(用于构造模式)不够大。

答案 2 :(得分:0)

if(i == max)size ++; 然后 if(smallList [i] == max)

请检查您的尺码值。