Laden...

ArgumentOutOfRangeException bei der List

Erstellt von Redmoon147 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.664 Views
Thema geschlossen
R
Redmoon147 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren
ArgumentOutOfRangeException bei der List

Ich weiß nicht wieso da ständing dieser Fehler kommt.
Angenommen ich füge 10 Schubladen und zieh 9 ab dann kommt dieser Fehler geb ich aber 5 ein also das er nur 5 abziehen soll funktioniert alles. Woran kann das liegen ?


 public void addSchublade(int anzahl)
        {
            for (int i = 0; i < anzahl; ++i)
            {
                schublade.Add("Inhalt der Schublade leer!");
            }
            int ergebnis = schublade.Count();
            if (ergebnis != anzahl)
            {
                int test = ergebnis + (anzahl-2);
                string test2 = test.ToString();
            }
        }

        public void deleteSchublade(int x)
        {
            for (int i = 0; i < x; i++) 
            {
               [ERROR] schublade.RemoveAt(x);[/ERROR]
            }
        }

        public string pruefe()
        {
            string result = schublade.Count.ToString();
            return result;
        }

MfG

Redmoon147

1.040 Beiträge seit 2007
vor 8 Jahren

Was kommt beim Count raus, wenn du 10 Schubladen hinzufügst?
Ohne es getestet zu haben, ist mMn das ++i das Problem.
Schaue dir diesbezüglich deine zweite for-Schleife mal an...

Das Problem ist natürlich, dass du in der zweiten Schleife nicht Variable i verwendest.
Hilfreich dabei: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

EDIT: In deinen Schleifen verwendest du einmal i und einmal i - das ist hier meiner Meinung nach kein Problem, an anderen Stellen kann das aber Probleme machen, weil es 2 verschiedene Dinge sind. 😉

R
Redmoon147 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Also wenn ich das debugge und mein Count anschaue kommt genau die Zahl raus die ich eingebe
angenommen ich habe 10 Schubladen geb dann ein das er 9 Löschen will kommt mir beim debuggen sogar 1 raus aber wieso kommt dann trotzdem der Fehler?
Hab das auch mal anderstrum geschrieben also i++ fehler ist weiterhin vorhanden

Wie meinst du das, dass ich in der zweiten Schleife nicht Variable i verwende ? 8o

MfG

U
135 Beiträge seit 2009
vor 8 Jahren

Wie meinst du das, dass ich in der zweiten Schleife nicht Variable i verwende ? 8o

Das wird er so meinen, wie er es schreibt 😉

schublade.RemoveAt(x)
1.040 Beiträge seit 2007
vor 8 Jahren
schublade.RemoveAt(x);

Du verwendest immer x (= 9). Du musst die Schleifenvariable i verwenden.

2.079 Beiträge seit 2012
vor 8 Jahren

Deine Methode macht folgendes:

Sie bekommt eine Zahl.
Du zählst in einer Schleife bis x hoch und entfärnst jedes mal das Element an dem selben Index x.

Wenn also 10 übergeben wird, entfernt er 10 mal das Item am Index 10 - oder versucht es zumindest.
Was Du willst, ist vermutlich das Element am Index i entfernen.
Oder du rufst RemoveAt ohne Schleife auf, dann wird das Element am Index x entfernt.

PS:
Ich würde jetzt gleich doppelt überholt?
Verdammt 😄

J
251 Beiträge seit 2012
vor 8 Jahren
R
Redmoon147 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Also wenn ich das x in i ändere dann funktioniert das genau so wenig...
wenn ich die schleife weg lasse zieht er mir nur eine schublade ab und nicht die gewünschte anzahl:(

was ich halt nicht verstehe ist das es bei anderen zahlen geht blos wenn es höhere zahlen sind die ich eingebe um die schubladen zu löschen kommt mir dieser doofer fehler

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Redmoon147,

verwende den Debugger [Artikel] Debugger: Wie verwende ich den von Visual Studio? und schaue, was in deiner List steht. Schaue dir an, was RemoveAt() macht und schau dir den Thread hier an:
[FAQ] Listenelemente suchen und entfernen

Gruss

Coffeebean

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

Also wenn ich das x in i ändere dann funktioniert das genau so wenig...

Klar. Überleg mal genau was da passiert.

Entweder Du solltest x-mal an der Stelle 0 entfernen, dann entfernst Du immer das jeweils erste Element in der Liste (wodurch dann das nächstfolgende zum neuen ersten wird).
Oder Du fängst beim letzten Element Element an. Dann musst Du aber Deine Schleife so umbauen, dass sie von i = Count - 1 x-mal rückwärts läuft (mit kleinerwerdendem Index -> i--).

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

R
Redmoon147 Themenstarter:in
17 Beiträge seit 2015
vor 8 Jahren

Ja also in der Liste stehen genau die Daten die raus komen hätte sollen aber der Fehler kommt totzdem ständig 😄

das mit dem Listenelemente suchen & ersetzten hab ich mir schon davor angeschaut aber irgendwie werd ich daraus nicht schlauer zumindest mit dem prozent zeichen da steht immer int in string geht nicht und weiß nicht was ich anstelle hinschreiben soll.

Also jetzt kapier ich gar nichts mehr 😄

5.658 Beiträge seit 2006
vor 8 Jahren

Hi Redmoon147,

Also jetzt kapier ich gar nichts mehr 😄

ich empfehle dir, nochmal in Ruhe die Antworten auf deine Fragen durchzulesen. Da wurde nämlich alles mehr oder weniger ausführlich erklärt. Wenn du damit nichts anfangen kannst, solltest du dich nocheinmal mit den Grundlagen beschäftigen. Am besten schaust du dir auch nochmal die Links an, die Jamikus und Coffeebean gepostet haben. Dann sollte relativ schnell klar werden, was mit deinem Code nicht stimmt.

Bitte beachte zukünftig unseren [Hinweis] Wie poste ich richtig?.

Christian

Weeks of programming can save you hours of planning

Thema geschlossen