while循环仅在条件满足后连续两次满足

时间:2014-12-20 23:52:53

标签: c#

编辑:哦,我的上帝 - 这就是复制/粘贴对你的作用。我忘了删除循环外的那个。感谢每个人。并感谢 Doorknob冰

我对编程非常陌生,而且我正在尝试使用我所知道的(这并不多)创建一个Tic Tac Toe游戏。我知道我可能会以一种可以想象得到的效率最低的方式来解决它,但我现在不想解决这个问题,我只是希望能够(几乎)完全依靠我自己来完成这项任务。在我看到我应该如何做之前工作。

无论如何,我已经到了可以通过调用方法来打印网格的点,现在我正在尝试找到一种方法来获取用户输入以标记网格位置(我稍后会将其转换为方法)。

然而,每当我运行程序并输入'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分配有关?

编辑:哦,我的上帝 - 这就是复制/粘贴对你的作用。我忘了删除循环外的那个。感谢每个人。并感谢 Doorknob冰

1 个答案:

答案 0 :(得分:0)

正如@Doorknob冰所说,你要求输入两次。当你第一次提出这个问题时,你实际上并没有对它做任何事情,所以这就是似乎什么都不做的原因,尽管这正是你编写它的目的。

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

这正是do{ stuff } while(condition);循环的用途。