.net 用c#从二维动态数组的每一行的所有正元素创建一个新的一维数组

s6fujrry  于 2023-01-06  发布在  .NET
关注(0)|答案(2)|浏览(158)

我是一个新手程序员,所以有一些问题。程序只显示3个积极的元素在一个一维数组,虽然可能有更多的二维数组。
这是我代码

using System;

namespace task_2
{
    class arrays
    {
        public int[,] A = new int[3, 3];
        public int[] B = new int[9];
        public void two_dimensional_array()
        {
            Random rand = new Random();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    A[i, j] = rand.Next(-100, 100);
                }
            }
            Console.WriteLine("Two-dimensional array: ");
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Console.Write("{0}\t", A[i, j]);
                }
                Console.WriteLine();
            }
        }
        public void one_dimensional_array()
        {
            Console.WriteLine("\nA one-dimensional array with only positive elements: ");
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                        if (A[i, j] > 0)
                            B[i] = A[i, j];
                }

            }
            for (int i = 0; i < 9; i++)
            {
                Console.WriteLine(B[i]);
            }
        }

    }
    class Program
    {
        static void Main()
        {
            Console.OutputEncoding = System.Text.Encoding.Default;
            arrays a;
            a = new arrays();
            a.two_dimensional_array();
            a.one_dimensional_array();
        }
    }
}

我在下面附上了一张结果的照片,其中只显示了三个积极的因素:enter image description here

fykwrbwg

fykwrbwg1#

将此行编辑为:(如果您需要zero to be displayed instead of negative数字)

//B[i] = A[i, j];
        B[i*3+j] = A[i, j];

如果您需要negative numbers not to be displayed

int index=0;
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                    if (A[i, j] > 0)
                        B[index++] = A[i, j];
            }

        }

        for (int i = 0; i < index; i++)
        {
            Console.WriteLine(B[i]);
        }
xbp102n0

xbp102n02#

在方法one_dimensional_array()中,使用嵌套的for循环检查A中的所有项,并有条件地更新B中的项:

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        if (A[i, j] > 0)
            B[i] = A[i, j];
    }
}

使用ij来迭代A的项,如您所料:循环遍历三行和三列。
使用i迭代B * 的索引的方式会阻止您迭代B的所有索引 *。实际上,您只在索引0、1和2上循环(根据您在外部for循环中对i的可能范围的指示)。
在嵌套循环中,将点击if (A[i, j] > 0)行九次。ijA[i, j]B[i]的值将更改如下:

|  i  |  j  |  A[i, j]  |  B[i]  |
|-----|-----|-----------|--------|
|  0  |  0  |  A[0, 0]  |  B[0]  |
|  0  |  1  |  A[0, 1]  |  B[0]  |
|  0  |  2  |  A[0, 2]  |  B[0]  |
|-----|-----|-----------|--------|
|  1  |  0  |  A[1, 0]  |  B[1]  |
|  1  |  1  |  A[1, 1]  |  B[1]  |
|  1  |  2  |  A[1, 2]  |  B[1]  |
|-----|-----|-----------|--------|
|  2  |  0  |  A[2, 0]  |  B[2]  |
|  2  |  1  |  A[2, 1]  |  B[2]  |
|  2  |  2  |  A[2, 2]  |  B[2]  |

结果,

      • B[0]**被指定为A中 * 第一 * 行中的*最后一个 * 正值(如果该行中有任何值为正值)
      • B[1]**被指定为A中 * 第二 * 行的*最后一个 * 正值(如果该行中有任何值为正值)
      • B[2]**被指定为A中 * 第三 * 行的*最后一个 * 正值(如果该行中有任何值为正值)

因此,您需要一种方法来迭代B的所有索引(即0--8)。
可以基于已经存在的ij值来计算这样的参数:
变量k = f(i,j)
其可以如下使用:

B[k] = A[i, j];

你能算出k的表达式吗?

相关问题