C#使用Foreach循环以矩阵格式打印2D数组

时间:2017-10-15 23:21:10

标签: c# arrays foreach

我正在尝试创建一个打印出时间表的数组。第一列是1次表,第二列是2次表,依此类推。系统会要求用户输入以确定行数和列数。 我想使用foreach循环以矩阵格式打印数组。当我使用for循环时,它工作正常,但我想知道如何使用foreach循环实现相同的输出。

显示的是代码:

int rows;
int columns;

Console.WriteLine("Enter the number of rows");
rows = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter the number of columns");
columns = Convert.ToInt32(Console.ReadLine());

int[,] multiDim = new int[rows, columns];

for (int p = 0; p < multiDim.GetLength(0); p++)
{
    for (int k = 0; k < multiDim.GetLength(1); k++)
    {
       multiDim[p, k] = (p + 1) * (k + 1);
    }
    Console.WriteLine();
    Console.ReadLine();            
}

foreach (int i in multiDim)
    {
        Console.Write(i + " ");

        if (i == multiDim.GetLength(1))
        {
            Console.WriteLine();
        }
    }

    Console.ReadLine();

当我输入大于2的行的值时,程序不会以正确的数组格式打印数组。例如,当我有3行和5列时,输出为:

1 2 3 4 5

2 4 6 8 10 3 6 9 12 15

我读过类似的问题,但他们似乎没有帮助。感谢所有的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码循环遍历数组的值,而不是索引。这意味着它恰好在最初工作,因为你的价值观很好。

我建议切换到使用Jagged Arrays而不是多维数组。这样您就可以foreach (row in multiDim),然后foreach (cell in row)

如果您仍然需要使用多维数组,那么您需要某种形式的计数器来跟踪您所在阵列的位置。这就是为什么常规for循环更适合用于此场景而不是foreach循环。