2017-02-05 1 views
-1

Auf meiner App kann ein Lehrer mehrere Klassen haben, und wenn ich ein Lehrerprofil ausschließe, muss ich zuerst seine Klassen löschen. Ich versuche, jedes class_id dieses Lehrers auf ein int Array zu setzen, um später alle Klassen zu löschen, deren ID in diesem Array enthalten ist.IndexOutOfRange Ausnahme ausgelöst beim Setzen des Int-Werts auf Array

Dies ist mein Code so weit:

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"); 
} 

Und das ist, was

reader_SelectedClasses.Read() 

tut:

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

Und das ist die Rückkehr, wenn ich versuchen, diese auf MySQL :

enter image description here

Aber es gibt mir eine IndexOutOfRangeException zurück, wenn ich den Code auf meiner DAO-Klasse ausführen. Was vermisse ich? Bereits ging here aber nicht ganz verstanden. Kann mir bitte jemand ein paar Worte erklären und dafür einen festen Code schreiben?

+0

Die if Bedingung wird nie ausgeführt, und der Wert von x wird nie erhöht . Sie fügen also normalerweise dem gleichen Index Werte hinzu. –

+0

Nach dem Bearbeiten Ihrer Frage, ziehe ich meine Kommentare zurück. –

+0

Sie müssen Zeile für Zeile durch Ihre Logik gehen und Sie werden genau sehen, woher das Problem kam. Sie versuchen, den ersten Index eines leeren Arrays zu erhalten. Auch wie wird x inkrementiert? – Nkosi

Antwort

1
  1. Sie müssen learn how to use a debugger und Schritt durch Ihr Programm.

  2. count = new int[x]; verwirft, was in count war und erstellt ein neues Array, das Nullen enthält. Die Indizes dieses Arrays gehen von 0 bis x - 1.

  3. count[x] = ... setzt das Array-Element auf Index x, die nach der vorherigen Zeile eins nach dem Ende des Arrays ist.

Sie müssen count = new int[x] nur einmal einzustellen, zu Beginn des Programms, und legen Sie count[x] = ... nur, wenn x> = 0 und x < count.Length.

0

Sie erhalten IndexOutOfRange Exception, weil Sie versuchen, auf ein Element aus einem Array zuzugreifen, das außerhalb des Bereichs liegt.

In der ersten Zeile stellen Sie x = 1 ein. In der Hoffnung, dass der Controller while-Schleife eingibt und x 1 ist, tritt er nicht in die Schleife ein und führt die nächste Anweisung aus. Aber count [1] (x = 1) ist nicht erlaubt, da Sie ein Array mit nur einem Element erstellt haben, auf das Sie mit count [0] zugreifen können. (Array Indizierung beginnt von 0)

+0

OP bearbeitet seinen Beitrag und ich denke, das war Tippfehler. – Pratik

1

Sie versuchen, ein List Verhalten mit einem array zu erreichen.
Offensichtlich ist die IndexOutOfRangeException, weil Sie ein leeres Array initialisieren und dann versuchen, Werte in einer nicht vorhandenen Zelle hinzuzufügen.

List<int> count = new List<int>(); 

while (reader_SelectedClasses.Read()) 
{ 
    int classId = _class.Class_id = reader_SelectedClasses.GetInt16("class_id"); 
    count.Add(classId); 
} 

Wenn Sie wirklich ein Array müssen aus ihm die Sie tun können:

Versuchen Sie, List<int> konvertieren

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

Am Ende habe ich die Antwort von Dour High Arch verwendet, aber diese Liste hat auch funktioniert und ich werde meinen Code überprüfen. Vielleicht werde ich eine Liste anstelle eines Arrays verwenden. – Pelicer

+0

Ofirs Antwort und meine können beide verwendet werden. Wenn Sie die Anzahl der Klassen in 'reader_SelectedClasses' erst nach dem Lesen kennen, sollten Sie eine' List' verwenden. –

Verwandte Themen