2017-02-05 6 views
-1

私のアプリでは教師が複数のクラスを持つことができます。教師のプロフィールを除外するときにはまずクラスを削除する必要があります。私は、この教師の各class_idint配列に配置しようとしています。この配列内にidが含まれているすべてのクラスを後で削除しようとしています。IndexOutOfRange例外int値を配列に設定するとスローされます

これは、これまでの私のコードです:

int x = 0; 
int[] count = new int[x]; 

while (reader_SelectedClasses.Read()) 
{ 
    if(x != 0) 
    { 
     x++; 
     count = new int[x]; 
    } 
    count[x] = _class.Class_id = reader_SelectedClasses.GetInt16("class_id"); 
} 

そして、これが

reader_SelectedClasses.Read() 

が何をするかです:

select class_id from tbl_class where user_id = " + id + "; 

そして、私は、MySQLでこれをしようとすると、これは、リターンです:

enter image description here

しかし、DAOクラスでコードを実行すると、IndexOutOfRangeExceptionが返されます。私は何が欠けていますか?既にhereに行ったが、あまり理解していない。誰かがこれについていくつかの単語とポストと固定コードで説明してくださいか?

+0

ザ・条件が実行されることはありませんし、xの値がインクリメントされることはありません場合。したがって、通常は同じインデックスに値を追加します。 –

+0

あなたの質問の編集後、私はコメントを撤回します。 –

+0

あなたのロジックを一行ずつ歩き回る必要があり、どこから問題が発生したのかが正確にわかります。空の配列の最初のインデックスを取得しようとしています。また、xはどのようにインクリメントされますか? – Nkosi

答えて

1
  1. あなたはlearn how to use a debuggerに進み、プログラムをステップ実行する必要があります。

  2. count = new int[x];は、countの内容を破棄し、ゼロを含む新しい配列を作成します。この配列のインデックスは0からx - 1になります。

  3. count[x] = ...は、前の行で配列の末尾より1つ大きいインデックスxの配列要素を設定します。

あなたはあなたのプログラムの冒頭で、一度だけcount = new int[x]を設定する必要があり、そして唯一のx> = 0かつx < count.Length場合count[x] = ...を設定します。

0

範囲外の配列から要素にアクセスしようとしているため、IndexOutOfRange例外が発生しています。

最初の行では、x = 1と設定しています。コントローラがループ中に入ることを望んでいて、xが1の場合、ループに入り、次の文を実行しません。しかし、1つの要素だけを持つ配列を作成し、count [0]でアクセスできるので、count [1](x = 1)は許されません。 (配列インデックスは0から始まります)

+0

OPが彼の投稿を編集したと私はそれが誤植だと思う。 – Pratik

1

Listの動作をarrayで実現しようとしています。
明らかに、空の配列を初期化してから、存在しないセルに値を追加しようとすると、IndexOutOfRangeExceptionが原因です。

List<int>に変換するようにしてください:

​​

あなたは本当にあなたが行うことができ、それのうち配列が必要な場合:

int[] countArray = count.ToArray() 
+0

最後に私はDour High Archの答えを使用しましたが、このリストもうまくいきました。私は自分のコードを見直します。リストの代わりにリストを使用することもあります。 – Pelicer

+0

Ofirの答えと私の両方を使うことができます。 'read_SelectedClasses'でクラスの数が分からない場合は、' List'を使用する必要があります。 –

関連する問題