2010-11-23 14 views
1

次のコードで範囲外の例外が発生する理由を理解できません。 _maxRowIndexおよび_maxColIndexの値は、それぞれ5および0です。例外は、rowcolが両方とも0に等しいときに初めてスローされます。私はなぜ0, 0が配列の範囲外になるのか分からない。配列要素にアクセスしようとするとIndexOutOfRangeExceptionが発生する

_cells = new ToolBarButton[_maxRowIndex, _maxColIndex]; 
    . 
    . 
    . 
    for (int col = 0; col <= _maxColIndex; col++) { 
        for (int row = 0; row <= _maxRowIndex; row++) 
        { 

         if (_cells[row, col] == null) 
         { 
          PopulateCell(toolBarbutton, row, col); 
         } 

        } 
       } 

答えて

1

に変更する必要があります

コル

_cells = new ToolBarButton[_maxRowIndex, _maxColIndex]; 
:最初の要素は、変更、0

だから、インデックスであります

:あなたの文の中で= <を持って

_cells = new ToolBarButton[_maxRowIndex+1, _maxColIndex+1]; 
+0

または、Mamtaが提案したことを実行してください。あなたのリストに5つのアイテムが存在するか、最後のアイテムがインデックス5になるかによって異なります。 – jtdubs

+0

リストの合計6つのアイテムの最後のインデックスを5にします。宣言は最高の指数ではなく、全体の要素のためであったということは私には起こりませんでした。私はあなたが提案した変更を行いました。それは今のところ私が望むように機能します。 – poke

4

配列インデックスは0から始まり、[upperbound-1]までです。ループは0から開始するため、< =制限値ではなく、制限値である<で終了する必要があります。したがって、ループ内の "< ="を "<"に変更してください。例:< = _maxColIndex

はあなたが最大のインデックスは5になりたい場合は、それが配列のように長さが6であることが必要であること

COL < _maxColIndex

1

...

だからあなたのループは、COL = 0、1、2、3、4と5のための評価... 5境界

1

のうち、私はあなたが

_cells = new ToolBarButton[5,1]; 

代わりの

以下のよう_cellsを宣言する必要がありますね
_cells = new ToolBarButton[5,0]; 
関連する問題