用二维数组创建一个表格矩阵C#。

问题描述 投票:-1回答:1

我想创建一个程序,在这个程序中,你要求用户输入一个数字,创建一个尽可能接近正方形的数组,然后用1填充用户指定的数字。你必须使用一个二维数组。下面是一个例子,说明它是什么样子的。

用户输入: 16

输出。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

我试着用循环运行的方法来做,但没有成功,希望有人能指导我怎么做。

c# arrays multidimensional-array 2d
1个回答
1
投票

首先让我们得到用户的输入。

int num;
while(!int.TryParse(Console.ReadLine(), out num) || num < 1)
{
    Console.WriteLine("Invalid number!");
}

然后计算出正方形的边数:

var sideLength = (int)Math.Ceiling(Math.Sqrt(num));

然后建立一个二维数组

var array = new int[sideLength, sideLength];

然后把数字写进去

for (int row = 0; row < sideLength; row++)
{
    for (int column = 0; column < sideLength; column++)
    {
        var value = row * sideLength + (column + 1);
        if (value > num)
            break;
        array[row, column] = value;
    }
}

但不要写比用户输入更高的数字,这样会让它们留下。0,这是很好的,因为你想从它的 1 所以你可以使用 0 以检测用户输入的数字是否为方块。

现在让我们准备一个字符串来格式化这些数字。如果你想让所有的数字都是相同的长度,你可以用下列方法来格式化它 int.ToString("0") 凡是 0s将设置长度。让我们创建一个字符串,它将使所有数字的长度相同。用户输入的是尽可能长的数字,所以你可以用它来创建字符串。

var format = new string('0', num.ToString().Length);

现在打印数组

for (int row = 0; row < sideLength; row++)
{
    for (int column = 0; column < sideLength; column++)
    {
        var value = array[row, column];
        if (value == 0)
        {
            Console.WriteLine("");
            goto breakBoth;
        }
        Console.Write($"{value.ToString(format)} ");
    }
    Console.WriteLine("");
}
breakBoth:

这将会把相同数量的数字放在一行中,并且会有相同数量的行,除非它发现了一个新的数字 0然后就会停止,最后一行不会是完整的行,如果输入的不是方块数,就会出现这种情况。

我们来看看输出。

输入: 16

输出:

01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

输入: 14

输出。

01 02 03 04
05 06 07 08
09 10 11 12
13 14

如果你想显示 0的如果不是一整行,你可以把打印部分的0勾去掉。

这可以优化吗?

是的!数组是没有用的,它只是包含了递增的数字。数组是无用的,它只是包含递增的数字。如果不需要二维数组,你可以完全删除它,并对打印函数进行一些修改。

int num;
while(!int.TryParse(Console.ReadLine(), out num))
{
    Console.WriteLine("Invalid number!");
}


var sideLength = (int)Math.Ceiling(Math.Sqrt(num));
var format = new string('0', num.ToString().Length);
for (int row = 0; row < sideLength; row++)
{
    for (int column = 0; column < sideLength; column++)
    {
        var value = row * sideLength + (column + 1);
        if (value > num)
        {
            Console.WriteLine("");
            goto breakBoth;
        }
        Console.Write($"{value.ToString(format)} ");
    }
    Console.WriteLine("");
}
breakBoth:

这段代码做了同样的事情,但没有二维数组。

© www.soinside.com 2019 - 2024. All rights reserved.