Benutzer mit den meisten Antworten
IndexOutOfRangeException

Frage
-
private void Addieren_CheckedChanged(object sender, EventArgs e) { int Adds = 0; Random GenAdd = new Random(); int[] ArrADD = new int[iAnzahl]; for (Adds = 0; Adds <= iAnzahl; ++Adds) { ArrADD[Adds] = GenAdd.Next(iVON, iBIS); }
Hallo zusammen ,
ich möchte folgendes tun:
ich möchte ein Array erstellen in dem zahlen abgelegt werden deren Anzahl und Größenordnung vom Benutzer frei bestimmt werden können z. B. Zehn Rechenaufgaben mit Zahlen zwischen 0 - 100 .
die Rechnerart wird festgelegt über eine Checkbox .
nun habe ich das Problem , sobald ich die Checkbox aktiviere und die Zufallszahlen gewünschten Zahlen Feld erstellt werden sollen bekomme ich die Fehlermeldung (IndexOutOfRangeException) .
ich möchte bietten mir zu sagen was ich vergessen habe oder falsch gemacht haben .
außerdem möchte ich euch bitten mir den Grund für diesen Fehler kurz zu erläutern (ich möchte ja was dazu lernen ) .
vielen Dank im voraus für alle Hilfe .
Gruß Hilko
Antworten
-
Hallo Hilko,
in .NET sind Arrays Zero-based, der Zähler fängt bei 0 an und das ist soweit in Deiner Schleife ja auch richtig.
D.H. aber auch, das die Array Grenzen von 0 ... (iAnzahl - 1) geht. Bei der Schleifenbedingung prüfst Du auf <= iAnzahl und somit überschreitest Du (iAnzahl - 1) als Index Grenze => OutOfRange Exception.
Ändere es einfach in echt kleiner
for (Adds = 0; Adds < iAnzahl; ++Adds)
und es wird richtig funktionieren,.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 12. März 2012 16:11
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
-
Hallo Hilko,
Dein letztes Posting war etwas schwer les- und verstehbar, ich versuche es trotzdem mal.
Also, Du hast eine Textbox und gibst dort ein 4 ein, der Wert wird gecastet und in iAnzahl geschrieben, also iAnzahl = 4.
Nun wird ein Array initialisiert mit der Anzahl = 4, also 4 Elemente. Der Index-Wert der Elemente ist 0-based und geht somit über 0, 1, 2, 3 = 4 Elemente, letzter Index Wert = 3 = (iAnzahl - 1).
Wenn Du in der Schleifenbedingung auf Adds auf <= iAnzahl prüfst, hast Du eine Schleife mit Adds Werten 0, 1, 2, 3, 4 und 5; den Indexwert 5 gibt es im Array aber nicht, daher der Fehler. Deswegen auf echt kleiner prüfen, damit die Schleife nur bis 4 = (iAnzahl - 1) geht.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
-
In der Annahme das iAnzahl = 5 ist. Würde die Schleife von 0 solange wie die Variable Adds kleiner oder GLEICH (< = ) iAnzahl ist laufen.
Bei folgender Schleife:
for (Adds = 0; Adds <= iAnzahl; ++Adds){}
Bedeutet dies, da du bei der Zahlenbasis 0 und nicht 1 beginnst, dass die Schleife 6 durchläufe macht. Zur Verdeutlichung:
iAnzahl = 5; Adds = 0;
Ist Adds ( 0 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 1
Adds ++;
Ist Adds ( 1 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 2
Adds ++;
Ist Adds ( 2 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 3
Adds ++;
Ist Adds ( 3 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 4
Adds ++;
Ist Adds ( 4 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 5
Adds ++;
Ist Adds ( 5 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 6
Adds ++;
Ist Adds ( 6 ) kleiner oder gleich iAnzahl ( 5 )? // Nein Schleifenende
Beim letzten Durchlauf ist aufgrund der Fett marktierten texte nicht korrekt, da iAnzahl nur 5 Werte besitzt (mit Basis 0).
for (Adds = 0; Adds < iAnzahl; ++Adds){}
iAnzahl = 5; Adds = 0;
Ist Adds ( 0 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 1
Adds ++;
Ist Adds ( 1 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 2
Adds ++;
Ist Adds ( 2 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 3
Adds ++;
Ist Adds ( 3 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 4
Adds ++;
Ist Adds ( 4 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 5
Adds ++;
Ist Adds ( 5 ) kleiner ( 5 )? // Nein Schleifenende
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
Alle Antworten
-
Hallo Hilko,
in .NET sind Arrays Zero-based, der Zähler fängt bei 0 an und das ist soweit in Deiner Schleife ja auch richtig.
D.H. aber auch, das die Array Grenzen von 0 ... (iAnzahl - 1) geht. Bei der Schleifenbedingung prüfst Du auf <= iAnzahl und somit überschreitest Du (iAnzahl - 1) als Index Grenze => OutOfRange Exception.
Ändere es einfach in echt kleiner
for (Adds = 0; Adds < iAnzahl; ++Adds)
und es wird richtig funktionieren,.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 12. März 2012 16:11
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
-
Hallo Olaf ,
erst einmal vielen Dank für Deine Antwort .
Ich hab jedoch die Zusammenhängen Diebe und einem Text schilderst noch nicht ganz verstanden
die Variable die iAnzahl ist ein umgewandelt String dem der Benutzer in einem Textbox in einem Form eingibt.
iAnzahl legt die Anzahl der Aufgaben fest die der Mathematik Trainer den Benutzer (meinem Sohn ) stellen sollen .
was ich nicht verstehe ist ich keinen die Textbox doch keinen Wert Eintragen mit -1 oder ?
die iAnzahl -1 ist und mein Array bei Null beginnt würde ich ja wieder außerhalb der Grenzen liegen oder ?
ich möchte dich bitten wir diesen Sachverhalt noch näher zu erläutern .
Vielen Dank im voraus .
Gruß Hilko
- Bearbeitet Robert BreitenhoferModerator Dienstag, 20. März 2012 08:10 Formatierung
-
Hallo Hilko,
Dein letztes Posting war etwas schwer les- und verstehbar, ich versuche es trotzdem mal.
Also, Du hast eine Textbox und gibst dort ein 4 ein, der Wert wird gecastet und in iAnzahl geschrieben, also iAnzahl = 4.
Nun wird ein Array initialisiert mit der Anzahl = 4, also 4 Elemente. Der Index-Wert der Elemente ist 0-based und geht somit über 0, 1, 2, 3 = 4 Elemente, letzter Index Wert = 3 = (iAnzahl - 1).
Wenn Du in der Schleifenbedingung auf Adds auf <= iAnzahl prüfst, hast Du eine Schleife mit Adds Werten 0, 1, 2, 3, 4 und 5; den Indexwert 5 gibt es im Array aber nicht, daher der Fehler. Deswegen auf echt kleiner prüfen, damit die Schleife nur bis 4 = (iAnzahl - 1) geht.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
-
In der Annahme das iAnzahl = 5 ist. Würde die Schleife von 0 solange wie die Variable Adds kleiner oder GLEICH (< = ) iAnzahl ist laufen.
Bei folgender Schleife:
for (Adds = 0; Adds <= iAnzahl; ++Adds){}
Bedeutet dies, da du bei der Zahlenbasis 0 und nicht 1 beginnst, dass die Schleife 6 durchläufe macht. Zur Verdeutlichung:
iAnzahl = 5; Adds = 0;
Ist Adds ( 0 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 1
Adds ++;
Ist Adds ( 1 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 2
Adds ++;
Ist Adds ( 2 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 3
Adds ++;
Ist Adds ( 3 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 4
Adds ++;
Ist Adds ( 4 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 5
Adds ++;
Ist Adds ( 5 ) kleiner oder gleich iAnzahl ( 5 )? // Ja, durchlauf 6
Adds ++;
Ist Adds ( 6 ) kleiner oder gleich iAnzahl ( 5 )? // Nein Schleifenende
Beim letzten Durchlauf ist aufgrund der Fett marktierten texte nicht korrekt, da iAnzahl nur 5 Werte besitzt (mit Basis 0).
for (Adds = 0; Adds < iAnzahl; ++Adds){}
iAnzahl = 5; Adds = 0;
Ist Adds ( 0 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 1
Adds ++;
Ist Adds ( 1 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 2
Adds ++;
Ist Adds ( 2 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 3
Adds ++;
Ist Adds ( 3 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 4
Adds ++;
Ist Adds ( 4 ) kleiner iAnzahl ( 5 )? // Ja, durchlauf 5
Adds ++;
Ist Adds ( 5 ) kleiner ( 5 )? // Nein Schleifenende
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:56
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09
-
Hallo Hilko Schraivogel,
Haben Dir die Antworten geholfen?
Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Hilko Schraivogel,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Bearbeitet Robert BreitenhoferModerator Dienstag, 20. März 2012 08:09 Formatierung