Mögliche Duplizieren:
Random number generator only generating one random numberCode wird nur korrekt ausgeführt, wenn er mit Debugger durchlaufen wird?
Ich war verblüfft etwas mit dieser vor wenigen Augenblicken. Ich habe den folgenden Code:
public blockType generateRandomBlock()
{
Random random = new Random();
int makeBlockOfType = random.Next(0, 100);
blockType t = blockType.normal;
if (makeBlockOfType <= 80 && makeBlockOfType >= 60)
{
t = blockType.blue;
}
else if (makeBlockOfType > 80 && makeBlockOfType <= 95)
{
t = blockType.orange;
}
else if (makeBlockOfType > 95 && makeBlockOfType <= 100)
{
t = blockType.green;
}
return t;
}
Ziemlich einfach, es ist ein enum
Wert zurückgeben basierend auf einer Zufallszahl (von Systemzeit basiert). Leider habe ich aus irgendeinem Grund alle Blöcke entweder in der einen oder in der anderen Farbe, obwohl das für jeden einzelnen Block läuft, der ins Spiel kommt. Wenn ich dies jedoch mit dem Debugger durchführe und dann die Ergebnisse nach einem Lauf sehe, sehe ich, dass die Blöcke jetzt basierend auf den bereitgestellten Chancen mehrfarbig sind. Ich bin ein wenig verwirrt darüber, warum das passiert.
Dafür verwende ich MonoGame, die den Mono-Compiler anstelle von Microsoft verwendet. Könnte das das Problem sein? Ich habe versucht, diesen Code in den Konstruktor inline zu setzen, von wo aus er aufgerufen wird, aber ich bekomme das gleiche Ergebnis (ich rate, der Compiler inline den Code sowieso).
Ich habe versucht, Visual Studio separat neu zu starten, anstatt den Build ausführen zu lassen; keine Änderungen.
Alle Vorschläge und Hilfe werden sehr geschätzt!
Versuch Zufall Schöpfung aus dem Verfahren zu bewegen, soll dabei helfen. –
'new Random()' seeds mit der Zeit, die für einige Millisekunden konstant bleibt. – CodesInChaos
Der Grund, warum es im Debug funktioniert, ist, dass es Zeit zwischen den Aufrufen gibt und Random tatsächlich unterschiedliche Seeds bekommt. – Archy