C# - 如何在 运行 时间内声明一个二维数组
C# - How to declare a 2D array in run time
我目前正在开发一个控制台扫雷应用程序,其中会生成许多地雷,并且每个数组索引都需要显示相邻地雷的数量。
用户需要定义行数和列数。
public class Board
{
private static int row;
private static int column;
private static int fields;
public static int Row { get => row; set => row = value; }
public static int Column { get => column; set => column = value; }
public static int Fields { get => fields ; set => fields = value; }
Random random = new Random();
public int randomX;
public int randomY;
public string[,] boardArr = new string[Row, Column];
public void EnterBoardDimensions()
{
Console.Write("Enter number of rows: ");
Row = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number of columns: ");
Column = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Console.Write("Enter number of fields: ");
Fields = Convert.ToInt32(Console.ReadLine());
}
public void DrawBoard()
{
for(int fields = 0; fields < Fields; fields++)
{
Console.WriteLine("\n\nField #{0}", fields + 1);
Console.Write("\n" + row + " x " + column);
for (int r = 0; r < Row; r++)
{
Console.WriteLine("");
for (int c = 0; c < Column; c++)
{
boardArr[r, c] = ".";
//randomX = random.Next(0, Row - 1);
//randomY = random.Next(0, Column - 1);
boardArr[randomX, randomY] = "*";
Console.Write(boardArr[r, c]);
}
}
}
Console.ReadLine();
}
}
在设计时声明数组的类型和名称。具有特定大小的数组对象总是在运行时创建。
// Design time
Mine[,] _mineField;
// Run time
_mineField = new Mine[m, n];
这里我假设你声明了一个Mine
class, struct 或enum
。当然它可以是任何其他类型(int[,]
、char[,]
等)。
此外,在大多数情况下,通用 List<T>
已取代旧的 ArrayList
。列表的优点是它们可以动态增长。但这不是这里的要求。一旦创建了数组对象,它的大小就不能改变。如果您在下一轮需要其他尺寸,只需创建一个新数组即可。
注意数组索引是zero-bound。即它将具有范围
_mineField[0 .. m - 1, 0 .. n - 1]
您当然可以使用从用户输入中获取的动态值创建一个 two-dimensional 数组。例如:
Console.WriteLine("Please enter the number of rows: ");
int rows = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please enter the number of columns: ");
int cols = Convert.ToInt32(Console.ReadLine());
int[,] board = new int[rows, cols];
已解决。我没有注意到我在代码之外声明了数组的边界,因此行和列变量默认为 0。
我目前正在开发一个控制台扫雷应用程序,其中会生成许多地雷,并且每个数组索引都需要显示相邻地雷的数量。
用户需要定义行数和列数。
public class Board
{
private static int row;
private static int column;
private static int fields;
public static int Row { get => row; set => row = value; }
public static int Column { get => column; set => column = value; }
public static int Fields { get => fields ; set => fields = value; }
Random random = new Random();
public int randomX;
public int randomY;
public string[,] boardArr = new string[Row, Column];
public void EnterBoardDimensions()
{
Console.Write("Enter number of rows: ");
Row = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number of columns: ");
Column = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Console.Write("Enter number of fields: ");
Fields = Convert.ToInt32(Console.ReadLine());
}
public void DrawBoard()
{
for(int fields = 0; fields < Fields; fields++)
{
Console.WriteLine("\n\nField #{0}", fields + 1);
Console.Write("\n" + row + " x " + column);
for (int r = 0; r < Row; r++)
{
Console.WriteLine("");
for (int c = 0; c < Column; c++)
{
boardArr[r, c] = ".";
//randomX = random.Next(0, Row - 1);
//randomY = random.Next(0, Column - 1);
boardArr[randomX, randomY] = "*";
Console.Write(boardArr[r, c]);
}
}
}
Console.ReadLine();
}
}
在设计时声明数组的类型和名称。具有特定大小的数组对象总是在运行时创建。
// Design time
Mine[,] _mineField;
// Run time
_mineField = new Mine[m, n];
这里我假设你声明了一个Mine
class, struct 或enum
。当然它可以是任何其他类型(int[,]
、char[,]
等)。
此外,在大多数情况下,通用 List<T>
已取代旧的 ArrayList
。列表的优点是它们可以动态增长。但这不是这里的要求。一旦创建了数组对象,它的大小就不能改变。如果您在下一轮需要其他尺寸,只需创建一个新数组即可。
注意数组索引是zero-bound。即它将具有范围
_mineField[0 .. m - 1, 0 .. n - 1]
您当然可以使用从用户输入中获取的动态值创建一个 two-dimensional 数组。例如:
Console.WriteLine("Please enter the number of rows: ");
int rows = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please enter the number of columns: ");
int cols = Convert.ToInt32(Console.ReadLine());
int[,] board = new int[rows, cols];
已解决。我没有注意到我在代码之外声明了数组的边界,因此行和列变量默认为 0。