Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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#_Loops_Methods - Fatal编程技术网

C# 当我将程序放入不同的方法中,并将它们组合成一个循环时,它们不会';我们不能正确地相互阅读。有人知道为什么吗?

C# 当我将程序放入不同的方法中,并将它们组合成一个循环时,它们不会';我们不能正确地相互阅读。有人知道为什么吗?,c#,loops,methods,C#,Loops,Methods,我正在做一个井字游戏,这是我的部分代码。 当我将我的所有方法放在一个循环中时,我的switch语句并没有读取用户的输入(例如,如果我想在6上放置一个片段),而是将其读取为“playerMove”,这会创建一个无效选项。有人能看出我的错误吗?Idk当我转到循环中的下一个方法时,如何在用户输入时保持PlayerMove。谢谢 while(gameDone == false) { DrawBoard ("1", "2", "3", &

我正在做一个井字游戏,这是我的部分代码。 当我将我的所有方法放在一个循环中时,我的switch语句并没有读取用户的输入(例如,如果我想在6上放置一个片段),而是将其读取为“playerMove”,这会创建一个无效选项。有人能看出我的错误吗?Idk当我转到循环中的下一个方法时,如何在用户输入时保持PlayerMove。谢谢

while(gameDone == false)
{
    DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
    GetSpaceOne("playerOne");
    PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerOne");
    DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
    GetSpaceTwo("playerTwo");
    PlacePieceTwo ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerTwo");
}

private static void DrawBoard (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine)
{
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("| " + spaceOne + " | " + spaceTwo + " | " + spaceThree + " |");
    Console.WriteLine("|---|---|---|");
    Console.WriteLine("| " + spaceFour + " | " + spaceFive + " | " + spaceSix + " |");
    Console.WriteLine("|---|---|---|");
    Console.WriteLine("| " + spaceSeven + " | " + spaceEight + " | " + spaceNine + " |");
    Console.ResetColor();
}

private static string GetSpaceOne (string playerOne)
{
    string playerOne;
    Console.WriteLine("");
    Console.Write("Player One (1-9): ");
    playerOne = Convert.ToString(Console.ReadLine());
}

private static void PlacePieceOne (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine, string playerOneMove)
{
    Console.WriteLine(playerOneMove);
    switch (playerOneMove)
    {
        case "1":
            spaceOne = spaceOne.Replace("1", "X");
            break;
        case "2":
            spaceTwo = spaceTwo.Replace("2", "X");
            break;
        case "3":
            spaceThree = spaceThree.Replace("3", "X");
            break;
        case "4":
            spaceFour = spaceFour.Replace("4", "X");
            break;
        case "5":
            spaceFive = spaceFive.Replace("5", "X");
            break;
        case "6":
            spaceSix = spaceSix.Replace("6", "X");
            break;
        case "7":
            spaceSeven = spaceSeven.Replace("7", "X");
            break;
        case "8":
            spaceEight = spaceEight.Replace("8", "X");
            break;
        case "9":
            spaceNine = spaceNine.Replace("9", "X");
            break;
        default:
            Console.WriteLine("Invalid Option. Please try again");
            break;
    }
}

PlayerMove有一个局部作用域,这意味着它只存在于您声明它的方法中。您应该从中返回值,并将其分配给调用循环中的变量

您还需要将其作为参数传递给下一个方法。您正在传递字符串“PlayerMove”。您不需要将参数传递给第一步中采用的方法

例如:

while(gameDone == false)
{
    DrawBoard ("1", "2", "3", "4", "5", "6", "7", "8", "9");
    var playerOneMove = GetSpaceOne();
    PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", playerOneMove);

...


private static string GetSpaceOne ()
{
    string playerOneMove;
    Console.WriteLine("");
    Console.Write("Player One (1-9): ");
    playerOneMove = Convert.ToString(Console.ReadLine());
    return playerOneMove;
}

我看到这里有很多问题

private static void PlacePieceOne (string spaceOne, string spaceTwo, string spaceThree, string spaceFour, string spaceFive, string spaceSix, string spaceSeven, string spaceEight, string spaceNine, string playerOneMove)
函数参数中的
playerMove

string playerOneMove;
Console.WriteLine("");
Console.Write("Player One (1-9): ");
playerOneMove = Convert.ToString(Console.ReadLine());
在您的
PlacePieceOne中无法访问
GetSpaceOne
中的
PlayerMove

因此,函数
PlacePieceOne
中的
playerMove
的值为
playeron
如此处所述

PlacePieceOne ("1", "2", "3", "4", "5", "6", "7", "8", "9", "playerOne");
此外,您正在尝试访问函数/scoppe中的
spaceOne
spaceTwo
、…
spaceNine
,并且您正在不同的范围内访问它

使用您的函数为tictac提供更好的解决方案

private static string spaceOne = "1";
private static string spaceTwo = "2";
.... till spaceNine;

while(gameDone == false)
{
    DrawBoard();
    GetPlayerOneMove();
    DrawBoard();
    GetPlayerTwoMove();
}

private static void DrawBoard()
{
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("| " + spaceOne + " | " + spaceTwo + " | " + spaceThree + " |");
    Console.WriteLine("|---|---|---|");
    Console.WriteLine("| " + spaceFour + " | " + spaceFive + " | " + spaceSix + " |");
    Console.WriteLine("|---|---|---|");
    Console.WriteLine("| " + spaceSeven + " | " + spaceEight + " | " + spaceNine + " |");
    Console.ResetColor();
}

private static void GetPlayerOneMove()
{
    bool playerMoveValid = false;
    while(!playerMoveValid)
    {
        string playerOne;
        Console.WriteLine("");
        Console.Write("Player One (1-9): ");
        playerOne = Convert.ToString(Console.ReadLine());

        switch (playerOne)
        {
            case "1":
                if(spaceOne == "1")
                {
                    spaceOne = spaceOne.Replace("1", "X");
                    break;
                    playerMoveValid = true;
                }
                else
                {
                    playerMoveValid = false;
                }
            case "2":
                spaceTwo = spaceTwo.Replace("2", "X");
                break;
            case "3":
                spaceThree = spaceThree.Replace("3", "X");
                break;
            case "4":
                spaceFour = spaceFour.Replace("4", "X");
                break;
            case "5":
                spaceFive = spaceFive.Replace("5", "X");
                break;
            case "6":
                spaceSix = spaceSix.Replace("6", "X");
                break;
            case "7":
                spaceSeven = spaceSeven.Replace("7", "X");
                break;
            case "8":
                spaceEight = spaceEight.Replace("8", "X");
                break;
            case "9":
                spaceNine = spaceNine.Replace("9", "X");
                break;
            default:
                Console.WriteLine("Invalid Option. Please try again");
                break;
        }
    }
}

private static void GetPlayerTwoMove()
{
    string playerTwo;
    Console.WriteLine("");
    Console.Write("Player Two(1-9): ");
    playerTwo= Convert.ToString(Console.ReadLine());
    switch (playerTwo)
    {
        case "1":
            spaceOne = spaceOne.Replace("1", "O");
            break;
        case "2":
            spaceTwo = spaceTwo.Replace("2", "O");
            break;
        case "3":
            spaceThree = spaceThree.Replace("3", "O");
            break;
        case "4":
            spaceFour = spaceFour.Replace("4", "O");
            break;
        case "5":
            spaceFive = spaceFive.Replace("5", "O");
            break;
        case "6":
            spaceSix = spaceSix.Replace("6", "O");
            break;
        case "7":
            spaceSeven = spaceSeven.Replace("7", "O");
            break;
        case "8":
            spaceEight = spaceEight.Replace("8", "O");
            break;
        case "9":
            spaceNine = spaceNine.Replace("9", "O");
            break;
        default:
            Console.WriteLine("Invalid Option. Please try again");
            break;
    }
}
为每个
switch/case
语句添加一个检查器

if(空格{numberOfEnteredValue}=={valueOfThatSpace})


这意味着
spaceOne
/
spaceTwo
等尚未更改为
X
O
spaceOne==1

您不会从
GetSpaceOne
返回任何内容,并且在调用该方法时也不会对结果执行任何操作。你应该得到一个警告,上面写着
C4715。。。并非所有控制路径都返回值。
对于
GetSpaceOne
。尝试使用锯齿状/多维数组重写此值,它将删除约90%的代码。添加了一个关于访问变量的方式有何问题的答案和解释,该方法有效,但不会在实际板中替换。我必须在DrawBoard方法中更改什么才能修复它?ThanksI做了私有静态字符串spaceOne-spaceNine,但我的板没有显示该字符串values@JaadQadadeh,我忘了提到添加初始值,我将更新我的答案。@JaadQadadeh,更新了它,如果它有帮助,您可以将它标记为答案和帮助,谢谢,但您能详细说明我如何添加检查器吗?我是c#的新手。感谢您的帮助,它将停止覆盖以前的值。我会再次更新答案。