La fin d'une autre personne si l'instruction C#
Je ne savais pas quoi d'autre à utiliser dans ce cas mais une instruction if.
Ce que j'essaie de faire c'est que je suis l'obtention d'une valeur string direction;
à partir d'un formulaire Windows et de vérifier si elle a de la valeur, je suis à la recherche d'. Puis de vérifier si le turtleDir
qui est une valeur de chaîne indiquant le sens turtleDir
a.
Le problème vient ici à autre chose si les déclarations, lors de la turtleDir
est lookingleft
il fait tout le reste si consolidés. Ce que je veux faire c'est après qu'il a fait d'autre instruction si elle doit s'arrêter et d'attendre pour la prochaine commande. ne pas passer par tous les états.
Quelqu'un peut-il svp me conseiller sur comment résoudre le problème et ce que je fais de mal?
Voici le code:
else if ( Program.form.direction == "right" )
{
if ( turtleDir == "left" )
{
angle = -1.6f;
turtleDir = "lookingLeft";
Program.form.direction = "";
}
else if ( turtleDir == "lookingLeft" )
{
angle = 3.15f;
turtleDir = "lookingDown";
}
else if ( turtleDir == "lookingDown" )
{
angle = 1.6f;
turtleDir = "lookingRight";
}
else if ( turtleDir == "lookingRight" )
{
angle = 0.0f;
turtleDir = "lookingUp";
}
}
- Vous pouvez
switch
sur des chaînes de caractères en C#, et cette méthode semble être un bon candidat. 🙂 Mais vous pourriez aussi penser à la commutation de l'enum pour les directions. - Il n'est pas possible pour tout le monde si instructions à exécuter. Ce qui est probablement ce qui se passe est que votre boucle principale (que nous ne pouvons pas voir dans votre post) continue à fonctionner, de sorte qu'il frappe ensuite la
if...else
code encore et encore, en passant par lookingLeft->lookingDown->lookingRight->lookingUp, au point où aucune des conditions mentionnées dans leif...else
peut être mis en correspondance. Votre bug est dans le "stop and wait". Comment est-ce votre programme de s'arrêter et d'attendre pour la prochaine commande? - vous êtes rightabout il poursuit en boucle, j'ai eu le même problème hier sur une touche, im en développement dans le XNA et son dans la méthode de mise à jour. afin de ne pas savoir où l'arrêt ou d'attente est
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un
switch
déclaration sur les cordes, trop:De cette façon, le
switch
bloc est toujours sorti après vos instructions sont fait. Vous pouvez également spécifier que faire si la chaîne correspond à aucune de ces valeurs par l'ajout d'uncase default:
à la fin. Rappelez-vous chacun de ces cas doit être terminée par unbreak
instruction (oureturn
/throw
mais je ne pense pas que vous avez besoin de ces dans ce cas).Si chaque cas est exécuté, votre problème est ailleurs. Si une méthode contient ce code et est appelé à commencer avec, par exemple,
turtleDir == "left"
à chaque appel de la méthode permettra deturtleDir
cycle jusqu'à ce que chaque cas a été exécutée etturtleDir
se termine avec le final de la valeur"lookingUp"
. Regardez donc votre flux de contrôle et peut-être garder une trace de savoir si vous avez déjà effectué cette vérification. Peut-être garder une trace du temps écoulé et le changementturtleDir
que si elle a été dans un état particulier pour un certain temps (je ne sais pas à vos exigences).EDIT: Vous devez définir
Program.form.direction = ""
dans tous lescase
déclaration. C'est pourquoi votre code est exécuté, encore et encore. Aussi, si aucune direction n'est entré, clair, trop.string direction
et actualDirection est stocké dansstring turtleDir
Program.form.direction
, à chaque mise à jour de votre boucle pense que l'utilisateur a entré un sens nouveau. Voir mon edit.Vous pouvez utiliser un vide
return;
- Déclaration, mais ensuite, vous laissez votre méthode de trop...return;
dans chaque casD'utiliser un commutateur
Il est autre chose se passe ici....
Une seule branche d'un SI/d'AUTRE-SI l'instruction est exécutée. Vous pourriez vouloir à refactoriser le code d'une instruction SWITCH pour des raisons de lisibilité des raisons; mais pas parce qu'il serait à changer votre comportement.
Regardez ce code:
TOUTES les conditions sont remplies. Et le premier à s'exécute. SEULEMENT le premier.
Dans ce code, la deuxième seulement deux sont remplies:
if(0 == 2) { Console.WriteLine("Division 1"); }
else if(true==true) { Console.WriteLine("Division 2"); }
else if(false==false) { Console.WriteLine("Branche 3"); }
Et la deuxième, on exécute.
Une série de sinon-si n'tous les exécuter si la condition est vraie.
Mon deviner, c'est que vous êtes en boucle au travers de cette très rapide ou quelque chose et l'itération suivante est entrer dans le SI de la logique et de l'exécution de la prochaine branche. Vous pourriez avoir besoin d'afficher plus de code, de sorte que vous obtenez plus de réponses utiles pour votre situation particulière.
La meilleure façon de suivre ce bas, à mon humble avis, est de placer un point d'arrêt au début de votre SI la logique et l'étape-par le code d'une exécution à la fois. Vous devez voir qu'il ne va que dans un AUTRE, SI la branche et des sorties, et vous pouvez voir si il rentre.
Enfin, l'instruction SWITCH ne permet pas implicitement exécuter plusieurs branches soit.
Qui ne fera même pas compiler. Je crois en C/C++, vous pourriez tomber bien des cas énoncés, sauf si vous explicitement ajouté break; ou similaire de contrôle. En C# qui n'est pas le cas.