-1

私の Java コードでは、データが与えられ、モードを見つける必要があります。すべてが正常にコンパイルされ、すべてのメソッドが機能します。ただし、モードにアクセスしようとするとjava.lang.ArrayIndexOutOfBoundsException: 987、ターミナル ウィンドウに が表示されます。強調表示されている部分は、私の最大の方法の 1 つである次の方法にあります。ちなみに、データ配列は単なる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

ArrayIndexOutOfBound 例外がスローされ、配列が不正なインデックスでアクセスされたことを示します。インデックスが負であるか、配列のサイズ以上です。Array オブジェクトを反復するときはいつでも。インデックスが常にその長さよりも小さいことを確認しながら反復する必要があります

例えば、

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

サイズ変数に、不正な配列インデックスの値が含まれています。それが問題です

于 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;
}

入力配列が null の場合は処理されません。

于 2013-11-15T06:06:56.107 に答える
0

サイズに格納されている数値を見て、宣言したサイズを確認しoa[]ます。サイズが のサイズよりも大きい場合oa[]は、問題があります。

于 2013-11-15T05:59:53.200 に答える