Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# While循环开关语句直到语句为false_C# - Fatal编程技术网

C# While循环开关语句直到语句为false

C# While循环开关语句直到语句为false,c#,C#,我创建了两个使用相同属性的类。函数GenerateRamdon从第二个类继承的方向类称为health。我发现的问题是,当它在GenerateRamdon函数中运行代码时,它没有到达switch语句。在查看断点和传递的信息时,Ramdom方法工作正常,并生成正确的数字,当删除while循环时,它将转到正确的if语句 private void GenerateRamdon() { while (StartHealth < 0) { Random Directio

我创建了两个使用相同属性的类。函数GenerateRamdon从第二个类继承的方向类称为health。我发现的问题是,当它在GenerateRamdon函数中运行代码时,它没有到达switch语句。在查看断点和传递的信息时,Ramdom方法工作正常,并生成正确的数字,当删除while循环时,它将转到正确的if语句

private void GenerateRamdon()
{
    while (StartHealth < 0)
    {
        Random DirectionRandon = new Random();
        int GetDirect = DirectionRandon.Next(0, 100);

        if (GetDirect <= 20)
        {
            Console.WriteLine("Would you like to move straight, Right or Left");
            string FirstDirect = Console.ReadLine();

            while (FirstDirect.Equals(true))
            {
                switch (FirstDirect)
                {
                    case "Straight":
                        Console.WriteLine("You walk straight forward");
                        break;

                    case "Right":
                        Console.WriteLine("You walk to your right");
                        break;

                    case "Left":
                        Console.WriteLine("You walk to your left");
                        break;

                    default:
                        Console.WriteLine("Please enter Vailid direction");
                        break;
                }
            }
        }
        else if (GetDirect > 21 && GetDirect <= 40)
        {
            Console.WriteLine("Would you like to move stay, back or Left");
            string SecontDirect = Console.ReadLine();

            while (SecontDirect.Equals(true))
            {
                switch (SecontDirect)
                {
                    case "Stay":
                        Console.WriteLine("You stand still");
                        break;

                    case "Back":
                        Console.WriteLine("You walk back to where you came but it looks all different");
                        break;

                    case "Left":
                        Console.WriteLine("You walk to your left");
                        break;

                    default:
                        Console.WriteLine("Please enter Vailid direction");
                        break;
                }
            }
        }
        else if (GetDirect > 21 && GetDirect <= 60)
        {
            Console.WriteLine("Would you like to move Back, Right or Left");
            string ThridDirect = Console.ReadLine();

            while (ThridDirect.Equals(true))
            {
                switch (ThridDirect)
                {
                    case "Back":
                        Console.WriteLine("You walk back to where you came but it looks all different");
                        break;

                    case "Right":
                        Console.WriteLine("You walk to your right");
                        break;

                    case "Left":
                        Console.WriteLine("You walk to your left");
                        break;

                    default:
                        Console.WriteLine("Please enter Vailid direction");
                        break;
                }
            }
        }
        else if (GetDirect > 61 && GetDirect <= 80)
        {
            Console.WriteLine("Would you like to move back, straight or Right");
            string FourthDirect = Console.ReadLine();

            while (FourthDirect.Equals(true))
            {
                switch (FourthDirect)
                {
                    case "Back":
                        Console.WriteLine("You walk back to where you came but it looks all different");
                        break;

                    case "Straight":
                        Console.WriteLine("You walk straight forward");
                        break;

                    case "Right":
                        Console.WriteLine("You walk to your right");
                        break;

                    default:
                        Console.WriteLine("Please enter Vailid direction");
                        break;
                }
            }
        }
        else
        {
            Console.WriteLine("Would you like to move straight, Right, Stay or Left");
            string FifthDirect = Console.ReadLine();

            while (FifthDirect.Equals(true))
            {
                switch (FifthDirect)
                {
                    case "Straight":
                        Console.WriteLine("You walk straight forward");
                        break;

                    case "Right":
                        Console.WriteLine("You walk to your right");
                        break;

                    case "Stay":
                        Console.WriteLine("You stand still");
                        break;

                    case "Left":
                        Console.WriteLine("You walk to your left");
                        break;

                    default:
                       Console.WriteLine("Please enter Vailid direction");
                       break;
                }
            }
        }
    }
}

当我遍历switch语句时,代码没有被访问,控制台应用程序正在关闭。我只是想知道这是为什么,以及如何解决这个问题的指导。感谢您提供的任何信息

这里有几个问题;让我们首先确保输入请求在循环中,并且我们有一个布尔值true/false来存储程序是否对输入满意:

Console.WriteLine("Would you like to move straight, Right or Left");
bool isInputValid = false; // stores the validity of the input, reusable
string FirstDirect = "moonwalk"; // this will be overwritten inside of the loop
while (!isValidInput) // same as: while (isValidInput == false)
{
  firstDirect = Console.ReadLine();
  switch (FirstDirect)
  {
    case "Straight":
      Console.WriteLine("You walk straight forward");
      isValidInput = true;
      break;
    case "Right":
      Console.WriteLine("You walk to your right");
      isValidInput = true;
      break;
    case "Left":
      Console.WriteLine("You walk to your left");
      isValidInput = true;
      break;
    default:
      Console.WriteLine("Please enter Valid direction");
      isValidInput = false; // not necessary, but there you go
      break;
    }
  }
}
isValidInput = false; // reset for next loop

我们实际上可以重用方向指示器firstDirect,我会在后续循环中将其更改为inputDirection变量,除非您想保留数据以了解他们以前的选择。

,首先,FirstDirect.Equalstrue将始终为false.string.Equalsbool将始终为false。您的意思是边写边写吗?但请不要在实践中这样做,你希望你的循环终止可能与你的问题无关:请移动新的随机变量;搞不清状况任何循环。总是让它静止。
Console.WriteLine("Would you like to move straight, Right or Left");
bool isInputValid = false; // stores the validity of the input, reusable
string FirstDirect = "moonwalk"; // this will be overwritten inside of the loop
while (!isValidInput) // same as: while (isValidInput == false)
{
  firstDirect = Console.ReadLine();
  switch (FirstDirect)
  {
    case "Straight":
      Console.WriteLine("You walk straight forward");
      isValidInput = true;
      break;
    case "Right":
      Console.WriteLine("You walk to your right");
      isValidInput = true;
      break;
    case "Left":
      Console.WriteLine("You walk to your left");
      isValidInput = true;
      break;
    default:
      Console.WriteLine("Please enter Valid direction");
      isValidInput = false; // not necessary, but there you go
      break;
    }
  }
}
isValidInput = false; // reset for next loop