C#-如何在运行时声明2D数组

时间:2019-05-07 15:07:44

标签: c# arrays arraylist multidimensional-array 2d

我目前正在使用控制台扫雷应用程序,该应用程序会生成许多地雷,并且每个数组索引都需要显示相邻地雷的数量。

用户将需要定义行数和列数。

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();
    }
}

3 个答案:

答案 0 :(得分:1)

在设计时,您声明数组的类型和名称。具有特定大小的数组对象总是在运行时创建。

describe('Refresher', () => {
  beforeAll(() => jest.spyOn(React, 'useEffect').mockImplementation(React.useLayoutEffect))
  test('should refresh the result every 60 seconds', () => {
    jest.useFakeTimers();
    const onRefreshSpy = jest.fn();
    const refresher = renderer.create(<Refresher onRefresh={onRefreshSpy} />);
    expect(onRefreshSpy).not.toHaveBeenCalled();
    jest.runOnlyPendingTimers();
    expect(onRefreshSpy).toHaveBeenCalled();
  });
});

在这里,我假设您已经声明了// Design time Mine[,] _mineField; // Run time _mineField = new Mine[m, n]; 类,struct或Mine。当然,它可以是任何其他类型(enumint[,]等)。

此外,在大多数情况下,通用char[,]取代了旧的List<T>。列表的优势在于它们可以动态增长。但这不是必需的。创建数组对象后,其大小不得更改。如果下一轮需要其他尺寸,只需创建一个新数组即可。

请注意,数组索引是零界的。即它将具有范围

ArrayList

答案 1 :(得分:1)

您当然可以用用户输入的动态值创建一个二维数组。例如:

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];

答案 2 :(得分:0)

已解决。我没有注意到我在代码外部声明了数组的界限,因此行和列变量的默认值为0。