交换两个变量的值

时间:2015-03-18 14:11:41

标签: c# variables swap

我目前很难交换两个变量。我希望能够在用户输入空白单元格旁边的值后交换值 为我极其混乱的代码道歉,我只是拿起C#。

static void SwapNums(string[,] theBoard)
    {
        int col, row;
        string swap;
        string number = ReadNumber();

        for (col = 0; col                 if (theBoard[col, row] == "")
                            {
                                theBoard[col, row] = number;

                            }
                        }
                    }                            

                }
            }
        }
    }
} < 6; col++)
        {
            for (row = 0; row < 6; row++)
            {
                if (theBoard[col,row] == number)
                {
                    if (theBoard[col + 1, row] == "-" || theBoard[col - 1, row] == "-" || theBoard[col, row + 1] == "" || theBoard[col, row - 1] == "-")
                    {
                        swap = theBoard[col, row];

                        theBoard[col, row] = "";

                        for (col = 0; col < 6; col++)
                        {
                            for (row = 0; row < 6; row++)
                            {
                                if (theBoard[col, row] == "")
                                {
                                    theBoard[col, row] = number;

                                }
                            }
                        }                            

                    }
                }                 if (theBoard[col, row] == "")
                            {
                                theBoard[col, row] = number;

                            }
                        }
                    }                            

                }
            }
        }
    }
}
            }
        }
    }

目前,此代码正在用用户输入的内容替换空白单元格,但不会将包含该数字的单元格替换为p。

1 个答案:

答案 0 :(得分:1)

创建一个能够获得&#34;位置的功能&#34;一个元素。像这样的东西?

const int ROWS = 6;
const int COLUMNS = 6;

static Tuple<int, int> GetPosition(string[,] theBoard, string value)
{
    for (int i = 0; i < ROWS; i++)
        for (int j = 0; j < COLUMNS; j++)
            if (theBoard[i, j] == value)
                return new Tuple<int, int>(i, j);

    return new Tuple<int, int>(-1, -1);
}

然后,只需交换元素,如下所示:

var numberPosition = GetPosition(theBoard, number);
var minusPosition = GetPosition(theBoard, "-");

theBoard[numberPosition.Item1, numberPosition.Item2] = "-";
theBoard[minusPosition.Item1, minusPosition.Item2] = number;

确保检查元素是否已找到! (Item1Item2如果不是-1

在这里,完整的代码说明了这个概念:http://pastebin.com/5kjDPeX8

编辑:

哦,是的,如果元素在它旁边,它应该只被交换,那么,只需检查返回的位置。以下是SwapNums方法的替代:(我没有更新上面的pastebin代码)

static void SwapNums(string[,] theBoard, string number)
{
    var numberPosition = GetPosition(theBoard, number);
    var minusPosition = GetPosition(theBoard, "-");

    if (numberPosition.Item1 == -1 || minusPosition.Item1 == -1)
        throw new Exception("Element " + number + " or - was not found in theBoard!");

    if (numberPosition.Item1 == minusPosition.Item1) //they are in the same row
    {
        if (numberPosition.Item2 + 1 == minusPosition.Item2 ||
            numberPosition.Item2 - 1 == minusPosition.Item2) // if they are next to eachother
        {
            theBoard[numberPosition.Item1, numberPosition.Item2] = "-";
            theBoard[minusPosition.Item1, minusPosition.Item2] = number;
        }
    }
    else if (numberPosition.Item2 == minusPosition.Item2) // same column
    {
        if (numberPosition.Item1 + 1 == minusPosition.Item1 ||
            numberPosition.Item1 - 1 == minusPosition.Item1) //if they are above or below
        {
            theBoard[numberPosition.Item1, numberPosition.Item2] = "-";
            theBoard[minusPosition.Item1, minusPosition.Item2] = number;
        }
    }
}

略微偏离(可能是教育性的):

Tuple<int, int>这个东西只是一个包含两个元素的类(即int Item1int Item2),当你的函数需要返回两个东西时,它真的很方便使用(在我们的case,元素的行和列位置。)

<int, int>部分表示Item1Item2的类型为int。类上的<something something etc.>项通常是名为generics的东西的一部分,这是一种高级编程概念。

简而言之(关于泛型),它允许你创建一个&#39; general&#39;一种物体,可以操纵不同类型的物体。 Tuple这里可以包含任何类型的对象; Tuple<string, int>会有string Item1int Item2

但这不是你现在应该担心的事情。当你自己创作了几个课程后,你就会明白为什么这很方便。现在,Tuple类是你需要从函数快速简单地返回2个东西的东西。