繁体   English   中英

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

[英]Creating a new one-dimensional array from all positive elements of each row of a two-dimensional dynamic array in c#

我是一个新手程序员,所以有一些问题。 该程序仅显示一维数组中的 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();
        }
    }
}

我在下面附上了结果的照片,其中只显示了三个积极因素:在此处输入图片描述

将此行编辑为:(如果您希望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]);
        }

在您的方法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的表达式吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM