Gewinde Geschrieben 26. August 2021 Geschrieben 26. August 2021 Hallo zusammen, ich versuche mir c# mit Hilfe von Büchern und Videokursen selber beizubringen. Derzeit befinde ich mich noch bei den Grundlagen der Programmiersprache. Ich versuche eine for-Schleife zu programmieren, welche ein Arrey von Strings durchläuft und den Inhalt dann rückwärts über die Konsole wieder ausgibt. Nach meinem Verständnis, gebe ich der Laufvariable am Anfang der Schleife die Länge des Arreys an, diese soll dann das Arrey von hinten nach vorne durchlaufen und dabei in jedem Umlauf um 1 verringert werden. Danach soll dieses dann über die Variable ausgegeben werden. Leider wird mir immer eine "System.IndexOutOfRangeException: "Index was outside the bounds" ausgegeben. Könnte mir vielleicht jemand behilflich sein und meine Denkfehler aufzeigen? vielen Dank. class Program { static void Main(string[] args) { string[] names = new string[] { "Hannes" }; for(int x = names.Length; x > names.Length -1; x--) { Console.Write(names[x]); } Console.ReadKey(); } } Zitieren
Whiz-zarD Geschrieben 26. August 2021 Geschrieben 26. August 2021 Wenn du mit einem Indexer auf den Inhalt einer Arrays zugreifen möchtest, dann fängt die Zählung bei 0 an und nicht bei 1. Die Variable x hat bei der Initialisierung den Wert von names.length (in deinem Fall 6) aber das 's' von "Hannes" hat den Index 5. Beim Index 6 greift er nun ins Leere und du bekommst dann die IndexOutOfRangeException. Zitieren
Fachinf78282 Geschrieben 26. August 2021 Geschrieben 26. August 2021 Außerdem solltest du kein String Array verwenden, sondern ein normalen String. Hier ist die Lösung: var name = "Hannes"; for (int i = name.Length - 1; i >= 0; i--) Console.Write(name[i]); Zitieren
Gewinde Geschrieben 26. August 2021 Autor Geschrieben 26. August 2021 Danke für eure schnellen Antworten. Das mit dem Index (beginnend mit 0) war mir bekannt, allerdings weisen so ziemlich alle Bücher in einigen Bereichen diverse Lücken auf. Z.B. Dachte ich vorher, die -1 hinter dem arrey.Length läßt das Arrey von hinten durchlaufen, da dies nie wirklich erklärt wurde. Das buch was ich habe ist sehr gut, allerdings wird dies dort auch einfach nur als "sollte bekannt sein" hingenommen. Durch ein Javaforum habe ich erfahren, das die -1 durch den Index 0 zustande kommt. Eure Antworten haben mich etwas umdenken lassen und mich anscheinend zum Ziel geführt. Nur für mein Verständnis nochmal die Frage. Ist es in c# nicht vorgesehen das man einfach so ein Stringarrey rückwärts durchläuft, oder liegt es daran, dass ein Stringarrey eigentlich ein Arrey von Arreys ist. Streng genommen ist ein String ja schon ein Arrey von Chars. Hier nochmal mein neuer Code: class Program { static void Main(string[] args) { string[] textArrey = new string[] { "Hallo" }; for(int text = 0; text < textArrey.Length; text++) { string newText = textArrey[text]; for(int i = newText.Length-1; i >= 0; i--) { Console.Write(newText[i]); } } Console.ReadKey(); } } Zitieren
be98 Geschrieben 26. August 2021 Geschrieben 26. August 2021 (bearbeitet) array durchlaufen eigentlich immer in einer schleife. geht in beiden richtungen, von vorne nach hinten kommt eher häufiger vor würde ich behaupten. es gibt noch die Möglichkeiten mit einer for-each schleife und mit einem iterator. das kannst du dir auch mal anschauen. Ich muss mich korrigieren. Das mit dem Iterator ist in dem Beispiel wohl keine so gute Idee Bearbeitet 26. August 2021 von bene98 Zitieren
Whiz-zarD Geschrieben 26. August 2021 Geschrieben 26. August 2021 vor 31 Minuten schrieb Gewinde: Ist es in c# nicht vorgesehen das man einfach so ein Stringarrey rückwärts durchläuft, oder liegt es daran, dass ein Stringarrey eigentlich ein Arrey von Arreys ist. Streng genommen ist ein String ja schon ein Arrey von Chars. Ich verstehe deine Frage nicht so recht. Du erzeugst ja ein Array mit Strings. Also in diesem Array sind Strings enthalten. Natürlich kannst du auch ein Array rückwärts durchlaufen aber in der Regel kommt das nicht so häufig vor und es gibt auch andere Wege, wie man ein Array rückwärts durchlaufen kann. z.B. mittels LINQ. Anstatt: for(int i = newText.Length-1; i >= 0; i--) { Console.Write(newText[i]); } Kannst du auch folgendes schreiben: Console.WriteLine(new string(newText.Reverse().ToArray())); Reverse() ist eine Erweiterungsmethode aus der LINQ-Bibliothek. Es dreht die Sequenz um, die man dann in ein Array umwandeln muss, da der Konstruktor von string ein Array von Char erwartet. (ToArray() ist ebenfalls eine Erweiterungsmethode aus LINQ). Zitieren
121233 Geschrieben 27. August 2021 Geschrieben 27. August 2021 Dein String Array hat nur 1 Element. Außerdem kommst du ein wenig mit der Ford-schleifen Bedingung durcheinander. string[] names = new string[] { "Hannes","Mannes","Dannes" }; for(int x = names.Length-1 /* -1 damit du das 0. Element mitnehmen kannst */; x >= 0 /* die Schleife geht von oben ( 2,1,0) nach unten durch, deshalb hier 0 */; x--) { Console.Write(names[x]); } Zitieren
Gewinde Geschrieben 27. August 2021 Autor Geschrieben 27. August 2021 Hallo zusammen, meine Frage beruhte auf einem Denkfehler. Wie 121233 hier geschrieben hat, besitzt mein Arrey nur einen string, ich wollte diesen string immer rückwärts ausgeben. Dies macht er natürlich nicht, da das Arrey ja nur das gesamte Arrey rückwärts ausgibt. In meinem fall hätte dies ein rückwärts durchlaufenes charArrey sein müssen. Ich habe gerade eben unabhängig von dem hier zuletzt geschriebenen Post diesen Code geschrieben und dabei ist mir dann auch mein Fehler bewußt geworden. static void Main(string[] args) { string[] testArrey = new string[] { "Mario", "Gunna" }; for(int text = testArrey.Length-1;text >= 0; text--) { Console.WriteLine(testArrey[text]); } Console.ReadKey(); } Ich musste zweimal hinsehen um es zu bemerken. Mein Arrey wird rückwärts durchlaufen und auch ausgegeben (0=Mario,1=Gunna / Ausgabe lautet 1=Gunna, 0=Mario). Also hat es funktioniert. In meiner Idee hätte es annuG und oiraM werden müssen, was ja falsch wäre. Für diese Ausgabe hätte ich die Strings als Char Arreys durchlaufen müssen. In meinem Text ein Stück weiter oben wurde dies ja auch umgesetzt, allerdings wurde die Variable auch aus dem Arrey in eine neue Variable gespeichert (ein Arrey aus Char ist entstanden) und wurde dann rückwärts ausgegeben. Da mir dies recht kompliziert vorkam, dachte ich das es nicht vorgesehen ist ein Arrey direkt rückwärts auszugeben @Whiz-zarD(mein Denkfehler). Die Reversmethode ist mir auch bekannt, ich wollte es allerdings zum besseren Verständnis einfach ohne diese durchführen. Linq kommt erst ca. 300 Seiten Später dran. Ich möchte mich bei euch allen sehr herzlich bedanken, ich bin begeistert von diesem Forum. Lieben Gruß Gewinde 121233 reagierte darauf 1 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.