Laden...

Index Problem

Erstellt von joola vor 14 Jahren Letzter Beitrag vor 14 Jahren 749 Views
J
joola Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren
Index Problem

Hallo.
Ich stell mein Problem mal vereinfacht da.
ich habe ein string mit folgendem Aussehen:

Main
2
6
4
8
7
3
Main
4
5
7
9

jetzt möchte ich die Struktur so verändern, dass er hinteher so aussieht:

Main
X-Wert
Y-Wert
X-Wert
Y-Wert
X-Wert
Y-Wert
Main
X-Wert
Y-Wert
X-Wert
Y-Wert

Der Code meiner for schleife dazu sieht so aus:

  for (int i = 0; i < str.Length -1; i++)
                    {
                      if (str[i] == "Main")
                            {
                      else
                            { str[i] = "X-Wert";
                               str[i+1] = "Y-Wert";

                              i=i+1
                             }
                    }


Problem: Der letzte Wert wird nich verändert, also es bleibt die zahl stehen, da der index nicht zum letzten Element kommt.

Verändere ich die for Schleife so

  for (int i = 0; i < str.Length; i++)
                    {
                      if (str[i] == "Main")
                            {
                      else
                            { str[i] = "X-Wert";
                               str[i+1] = "Y-Wert";

                              
                             }
                    }


wird eine Indexoutofrangeexception geworfen, weil er ja mit str[i+1] +über den index kommt.

Wie kann ich das richtig machen?

Gelöschter Account
vor 14 Jahren

Wie kann ich das richtig machen?

so:

for (int i = 0; i < str.Length -1; i += 2)
                    {
                      if (str[i] == "Main")
                            {
                      else
                            { str[i] = "X-Wert";
                               str[i+1] = "Y-Wert";

                              
                             }
                    }
 

L
120 Beiträge seit 2007
vor 14 Jahren

@JAck30lena:

Auf den ersten Blick hätte ich gesagt des wird so glaub ich nix.
Wenn des erste ein "Main" ist, dann überspringt er doch des nächste
ohne es zu ändern, oder seh ich da was falsch?!

mfg,
Lec

5.658 Beiträge seit 2006
vor 14 Jahren

Meiner Meinung nach fehlt was:

for (int i = 0; i < str.Length -1; i += 2)
                    {
                      if (str[i] == "Main")
                            { i--; } 
                      else
                            { str[i] = "X-Wert";
                               str[i+1] = "Y-Wert";

                              
                             }
                    }
 

Weeks of programming can save you hours of planning

1.564 Beiträge seit 2007
vor 14 Jahren

Oder so:

string[] values = new string[] { 
"Main", "2", "6", "4", "8", "7", "3", 
"Main", "4", "5", "7", "9", 
};

int seq = 0;
for (int i = 0; i < values.Length; i++) {
   seq++;
   string s = values[i];
   if (s == "Main") {
      seq = 0;
   }
   else if (seq % 2 != 0) {
      values[i] = "X-Wert";
   }
   else {
      values[i] = "Y-Wert";
   }
}

foreach (var s in values) {
   TestContext.WriteLine(s);
}

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

J
joola Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

ich habe das jetzt so gemacht wie MrSparkle.
Das Problem ist jetzt noch, wen ich das einlese:
Main
2
6
4
8
7
3
6
4

kommt das raus:

Main
x-Wert
y-Wert
x-Wert
y-Wert

also die hälfte der werte fehlt!

J
joola Themenstarter:in
18 Beiträge seit 2009
vor 14 Jahren

hat sich erledigt, lag woanders dtran
danke