Zum Inhalt springen

String Arrey rückwärts ausgeben, Probleme eines Anfängers


Empfohlene Beiträge

Geschrieben

   

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

 

 

Geschrieben

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.

Geschrieben

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

Geschrieben (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 von bene98
Geschrieben
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).

 

Geschrieben

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]);

            }

 

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...