我目前很难交换两个变量。我希望能够在用户输入空白单元格旁边的值后交换值 为我极其混乱的代码道歉,我只是拿起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。
答案 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;
确保检查元素是否已找到! (Item1
和Item2
如果不是-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 Item1
和int Item2
),当你的函数需要返回两个东西时,它真的很方便使用(在我们的case,元素的行和列位置。)
<int, int>
部分表示Item1
和Item2
的类型为int
。类上的<something something etc.>
项通常是名为generics的东西的一部分,这是一种高级编程概念。
简而言之(关于泛型),它允许你创建一个&#39; general&#39;一种物体,可以操纵不同类型的物体。 Tuple
这里可以包含任何类型的对象; Tuple<string, int>
会有string Item1
和int Item2
。
但这不是你现在应该担心的事情。当你自己创作了几个课程后,你就会明白为什么这很方便。现在,Tuple
类是你需要从函数快速简单地返回2个东西的东西。