Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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# 而循环仅在连续两次满足条件后退出_C# - Fatal编程技术网

C# 而循环仅在连续两次满足条件后退出

C# 而循环仅在连续两次满足条件后退出,c#,C#,编辑:哦,我的天啊,这就是复制/粘贴为你做的。我忘了删除循环外的那个。对不起大家。谢谢你的门把手冰 我对编程非常陌生,我正试图用我所知道的东西来创建一个井字游戏。我知道我很可能会用想象中最低效的方式去做,但我现在不想去解决这个问题,我只想在看到我“应该”怎么做之前,让我几乎完全靠自己完成的事情发挥作用 无论如何,我已经到了可以通过调用一个方法来打印网格的地步,现在我正试图找到一种方法,利用用户输入来标记网格位置,稍后我会将其转换为一个方法 但是,每当我运行程序并键入“1”时,例如,我的while

编辑:哦,我的天啊,这就是复制/粘贴为你做的。我忘了删除循环外的那个。对不起大家。谢谢你的门把手冰

我对编程非常陌生,我正试图用我所知道的东西来创建一个井字游戏。我知道我很可能会用想象中最低效的方式去做,但我现在不想去解决这个问题,我只想在看到我“应该”怎么做之前,让我几乎完全靠自己完成的事情发挥作用

无论如何,我已经到了可以通过调用一个方法来打印网格的地步,现在我正试图找到一种方法,利用用户输入来标记网格位置,稍后我会将其转换为一个方法

但是,每当我运行程序并键入“1”时,例如,我的while循环会再次循环,我必须再次键入“1”,但这第二次它将执行我第一次期望的操作,并重新打印更新的网格

这是我的密码:

namespace TicTacToe
{
    class Program
    {
        static void Main(string[] args)
        {
            int userChoice = 0;
            bool inputCheck = true;
            string[,] grid = new string[3, 3];

            grid[0, 0] = "[ ]";
            grid[0, 1] = "[ ]";
            grid[0, 2] = "[ ]";
            grid[1, 0] = "[ ]";
            grid[1, 1] = "[ ]";
            grid[1, 2] = "[ ]";
            grid[2, 0] = "[ ]";
            grid[2, 1] = "[ ]";
            grid[2, 2] = "[ ]";

            Console.WriteLine(printGrid(grid));

            Console.Write("Please choose a space with coordinates 1 (top left) to 9 (bottom right): ");
            userChoice = int.Parse(Console.ReadLine());

            while (inputCheck == true)
            {
                inputCheck = false;

                Console.Write("Please choose a space with coordinates 1 (top left) to 9 (bottom right): ");
                userChoice = int.Parse(Console.ReadLine());

                if (userChoice == 1)
                    grid[0, 0] = "[X]";
                else if (userChoice == 2)
                    grid[0, 1] = "[X]";
                else if (userChoice == 3)
                    grid[0, 2] = "[X]";
                else if (userChoice == 4)
                    grid[1, 0] = "[X]";
                else if (userChoice == 5)
                    grid[1, 1] = "[X]";
                else if (userChoice == 6)
                    grid[1, 2] = "[X]";
                else if (userChoice == 7)
                    grid[2, 0] = "[X]";
                else if (userChoice == 8)
                    grid[2, 1] = "[X]";
                else if (userChoice == 9)
                    grid[2, 2] = "[X]";
                else
                    inputCheck = true;
            };

            Console.WriteLine(printGrid(grid));

            Console.ReadLine();
        }

        public static string printGrid(string[,] grid)
        {
            int rowLength = grid.GetLength(0);
            int columnLength = grid.GetLength(1);

            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write("{0} ", grid[i, j]);
                }
                Console.WriteLine("\n"); //double line spacing
            }

            return null;
        }
    }
}
我似乎不明白为什么第二次有效,但第一次不行?我已经仔细检查了我是否正确地将我创建的bool放入了循环中

也许这与我在循环中的userChoice分配有关


编辑:哦,我的天啊,这就是复制/粘贴为你做的。我忘了删除循环外的那个。对不起大家。谢谢你的门把手冰

As@门把手冰 注意,您要求输入两次。当你第一次要求它的时候,你实际上并没有对它做任何事情,所以这就是为什么它似乎什么也没做,尽管这正是你编码它的目的

我建议您考虑一下实际需要什么:程序应该至少接收一次用户输入,然后验证它是一个有效位置。如果有效,则while循环退出


这正是一个干什么的条件;循环是为

因为你要了两次?一次在循环之前,一次在循环中,你调试过代码吗?因为我喜欢门把手冰 如上所述,您只需请求用户输入两次。与您的while循环无关。请尊重。