Laden...

Mehrdimendionales Array: Eintrag in zweite Dimension hinzufügen

Erstellt von Tool vor 8 Jahren Letzter Beitrag vor 7 Jahren 2.758 Views
T
Tool Themenstarter:in
2 Beiträge seit 2016
vor 8 Jahren
Mehrdimendionales Array: Eintrag in zweite Dimension hinzufügen

Hey Leute
ich bin sowohl hier als auch bei c# noch ein ziemlicher neuling.
Ich habe nun folgendes Problem. Ich habe ein Array erstellt, welcher alle mir bekannten Möglichkeiten für Wochentage enthält. Also Montag, montag, mon und Mon. Das halt für jeden Wochentag. Jetzt wollte ich noch einen kleinen Text zu jedem Tag eingeben. Jedoch will er es einfach nicht annehmen. Könnt ihr mir sagen was ich falsch mache?
Er spuckt immer den Fehler :> Fehlermeldung:

"Nur assignment-, call-, increment-, decrement-, await- und 'new object'-Ausdrücke können als Anweisung verwendet werden. (CS0201) - E:\c#\Projekte\Logik\Logik\Program.cs:74,37" aus.
Die Zeile wo der Fehler auftrit, ist die wo hinter "Montag" noch etwas steht.
Hier der Code:


string[,] SSleife = new string[28,28];
            SSleife[0,0] = "Montag";"Aha es ist also Montag.";
            SSleife[1,1] = "montag";
            SSleife[2,2] = "Mon";
            SSleife[3,3] = "mon";
            SSleife[4,4] = "Dienstag";
            SSleife[5,5] = "dienstag";
            SSleife[6,6] = "die";
            SSleife[7,7] = "Die";
            SSleife[8,8] = "Mittwoch";
            SSleife[9,9] = "mittwoch";
            SSleife[10,10] = "Mit";
            SSleife[11,11] = "mit";
            SSleife[12,12] = "Donnerstag";
            SSleife[13,13] = "donnerstag";
            SSleife[14,14] = "Don";
            SSleife[15,15] = "don";
            SSleife[16,16] = "Freitag";
            SSleife[17,17] = "freitag";
            SSleife[18,18] = "fre";
            SSleife[19,19] = "Fre";
            SSleife[20,20] = "Samstag";
            SSleife[21,21] = "samstag";
            SSleife[22,22] = "sam";
            SSleife[23,23] = "Sam";
            SSleife[24,24] = "Sonntag";
            SSleife[25,25] = "sonntag";
            SSleife[26,26] = "Son";
            SSleife[27,27] = "sonn";

Wie schaffe ich es also das er den Zweiten Teil des Strings also auch "erkennt" und akzeptiert. Schon mal vielen Dank für eure hilfe.

709 Beiträge seit 2008
vor 8 Jahren

Hallo und willkommen Tool!
Durch das Semikolon nach "Montag" ist die Anweisung abgeschlossen.
Der String, der darauf folgt, stellt also eine eigene, jedoch ungültige Anweisung dar.
Das ist, als ob du als eigene Zeile "Text"; schreiben würdest.

Was möchtest du denn mit dem zweiten Text in der Zeile machen?

Ich frage mich auch, was du mit der zweiten Array-Dimension möchtest, da du bisher immer nur einen Wert pro Zeile einfügst.

T
Tool Themenstarter:in
2 Beiträge seit 2016
vor 8 Jahren

Die zweite Dimension soll nach einem Vergleich eigentlich nur einen Kleinen Text ausgeben. Die restlichen sind noch nicht gefüllt, da ich es erst hinbekommen will, das er es überhaupt versteht was ich da will -.-
Ich habe unter dem array noch noch einen Vergleich, der eine user eingabe mit dem inhalt der erstem Dimension vergleicht und dann den string aus der dementsprechenden 2. Dimension ausgibt.
Wenn ich aber aus dem ; ein , oder leerzeichen mache kommt immer, dass er ein ; erwartet.
Habe ich vielleicht etwas grundsätzliches bei der erstellung des Arrays übersehen?

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Tool,

du sagst ja mit der Zeile

SSleife[10,10] = "Mit";

explizit "Schreib mir an die Position denundnden Text"

Mit dem zweiten Text hat das Array keine Ahnung, was es machen soll. Der steht einfach da.

Du kannst aber einfach mal in die [Hinweis] Bitte schau in die SDK-/MSDN-Doku schauen ode nach deinem Begriff googlen. Du findest sicher einen Weg, wie mehrdimensionale Arrays verwendet werden.

Schau dir auch mal Listen an List<T> und schaue mal, ob du mit nem ordentlichen Objekt in den Listen nicht besser dran bist 😉

Bitte wähle demnächst einen aussagekräftigen Titel für deine Themen. Mit "Problem mit..." kann keiner ahnen, was das Thema behandelt, wenn man nur den Titel liest

Gruss

Coffeebean

709 Beiträge seit 2008
vor 8 Jahren

Wenn ich das richtig verstehe, soll die zweite Dimension deines Arrays demnach nicht die Größe 28, sondern die Größe 2 haben.

Dann schreibst du für den Montag z.B.

SSleife[0,0] = "Montag";
SSleife[0,1] = "Aha es ist also Montag.";

Dadurch ist an Position 0 der zweiten Dimension immer der erste Text und an Position 1 immer der Zusatztext.

Du zählst also nur die erste Zahl hoch.

3.003 Beiträge seit 2006
vor 8 Jahren

Noch einmal ausführlicher, was Pinki meint.

mit new string[28,28]; erschaffst du dir ein quadratisches Spielfeld mit 28 Spalten und 28 Zeilen. Dann gehst du hin und füllst 0,0 - erste Spalte, erste Zeile, 14,14 - 15. Spalte, 15. Zeile und so weiter. Im Endeffekt hast du 28 Werte, die du auf der Diagonalen deines Spielfeldes einträgst, nämlich überall da, wo Zeile und Spalte gleich sind. Rein rechnerisch füllst du also 28 von 784 Feldern - dass da was nicht stimmt, verstehst du jetzt hoffentlich.

Stattdessen brauchst du, wie Pinki gesagt hat, ein Spielfeld mit 28 Zeilen und 2 Spalten. In Spalte 1 kommt jeweils der Vergleichswert, in Spalte 2 die verknüpfte Ausgabe.

SSleife[0,0] - Zeile 1, Spalte 1
SSleife[15,0] - Zeile 16, Spalte 1
SSleife[27,1] - Zeile 28, Spalte 2

Davon völlig abgesehen wundert mich immer wieder, wieso Anfänger auf die Idee kommen, mit mehrdimensionalen Arrays zu beginnen. Nicht nur ist das ein Thema, bei dem man als Anfänger leicht durcheinander kommen kann, sondern auch noch eines weit jenseits jeglicher Programmier-Realität. Mein letztes mehrdimensionales Array habe ich glaube ich irgendwann vor 10 Jahren benutzt, und das nicht einmal in C#.

Was du da gemacht hast, laesst sich sehr viel übersichtlicher mit Objekten lösen. Dieses Konzept zu verstehen, dürfte dich viel weiter bringen, als mehrdimensionale Arrays zu verstehen.


class MeineWochentagsAnalyse
{
   public MeineWochentagsAnalyse(string abkuerzung, string ergebnis)
   {
       Wochentagsabkuerzung = abkuerzung;
       Ergebnis = ergebnis;
    }

    public string Wochentagsabkuerzung { get; private set; }
    public string Ergebnis { get; private set;
}

//Program.cs
MeineWochentagsAnalyse[] SSleife = new MeineWochentagsAnalyse[28];
SSleife[0] = new MeineWochentagsAnalyse("Montag", "Aha, es ist also Montag");
SSleife[1] = new MeineWochentagsAnalyse("montag", "Aha, es ist also Montag");
SSleife[2] = new MeineWochentagsAnalyse("Mon", "Aha, es ist also Montag");
SSleife[3] = new MeineWochentagsAnalyse("mon", "Aha, es ist also Montag");
//...
SSleife[27] = new MeineWochentagsAnalyse("son", "Aha, es ist also Sonntag");

Console.WriteLine(SSleife[15].Ergebnis);

Jetzt hast du in jedem Element von SSleife etwas drin, dessen Wochentagsabkürzung und Ergebnis fein säuberlich einander zugeordnet sind.

Am besten mal ein Grundlagenbuch schnappen und die Nase reinstecken 😃.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

B
88 Beiträge seit 2016
vor 7 Jahren

Es wurde ja eigentlich schon alles gesagt, aber hier wäre das ganze auch nochmal bildlich dargestellt wie mehrdimensionale Arrays funktionieren.

http://openbook.rheinwerk-verlag.de/visual_csharp_2010/visual_csharp_2010_02_005.htm#mja7765cb85356771c1471d578f301c89f

Viel Erfolg und willkommen 😃