Merkwürdige Rekursion
-
Hallo,
eigentlich dürfte eine Ausgabe wie:
0/0
1Nicht zustande kommen?
Ich seh einfach kein Fehler ;/
Wäre echt nett ,wenn mal jemand drüber schaut.Habe den code mal aufs minimum reduziert.
class Pos { public int X; public int Y; } class Program { static byte[,] array = { { 1, 0 }, { 1, 0 }, }; static Pos GetValidPosition(Random random) { int x = 0; int y = 0; x = random.Next(0, 2); y = random.Next(0, 2); byte b = array[x, y]; if(b == 1) { GetValidPosition(random); } return new Pos() { X = x, Y = y }; } static void Main(string[] args) { Random random = new Random(DateTime.Now.Millisecond); Pos p = GetValidPosition(random); Console.WriteLine(p.X + " / " + p.Y); Console.WriteLine(array[p.X, p.Y]); Console.Read(); }
-
Du beachtest den Rückgabewert bei deinem rekursiven Aufruf nicht!
PS: Warum verwendest du da überhaupt eine Rekursion anstatt einer Schleife?
-
Jo, vielen dank einfaches "return" hat gereicht, alles läuft wie es soll.
Danke!Mmh, ja hatte vorher ne Lösung mit WhileSchleife, war aber auchn Fehler drin.
Der hatte auch zu ähnlichen Problemen geführt...
Kann es nicht mehr reproduzieren.Hatte mich dann so genervt, das ich mal Rekursion ausprobieren wollt.
-
Hier die Lösung mit einer Schleife:
static Pos GetValidPosition(Random random) { int x, y; do { x = random.Next(0, 2); y = random.Next(0, 2); } while (array[x, y] == 1); return new Pos() { X = x, Y = y }; }
Ist doch ganz einfach
-
Ja, nach ner kleinen Denkpause habe ich nochmal ne Schleife probiert.
Geht jetzt^^
Rekursion mal entfernt, bekomm jetzt auch keine StackOverflows mehr^^
Waren wohl nen paar zu viel.Ja, hatte mich da i-wie verzettelt...
Fehler an Stellen gesucht wo keine waren...
Dann auch noch an der falschen Stelle gezeichnet,hat auch zur Verwirrung beigetragen...Habe deine Version mal übernommen.
private Vector2 RndValidPosition(Random random) { int x; int y; do { x = random.Next(0, 100); y = random.Next(0, 100); } while (PositionArray[x, y] != 0); return new Vector2(x, y); }
Einwandfrei!Ist doch schöner so.
Normalerweise mach ich net gleich nen Forenpost auf wenn ich mal hänge, aber das "return" hat mich dann gekillt.^^
So, dank nochma und bis zum nächsten mal:)