【问题标题】:Creating a new one-dimensional array from all positive elements of each row of a two-dimensional dynamic array in c#从 c# 中的二维动态数组的每一行的所有正元素创建一个新的一维数组
【发布时间】:2023-01-04 22:32:17
【问题描述】:

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

【问题讨论】:

  • 您需要调试代码。您不会仅通过查看最终结果来尝试找出代码无法正常工作的原因。您需要准确查看代码在每个步骤中的作用。如果您不知道如何调试,请停止您正在做的事情并学习。即使您仍然无法找到解决方案,您也应该能够准确地告诉我们代码在何处以及如何与您预期的不同。您应该能够告诉我们它发生在哪条线上、数据是什么、您预期会发生什么以及实际发生了什么。找到该站点后,您可以向后查找原因。
  • 提示:考虑如果同一行中的两个整数(i 的值相同但j 的值不同)为正数会发生什么情况。
  • 您需要一个变量 k 来索引输出:B[k++]

标签: c# .net .net-core


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在你的方法 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] &gt; 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 的表达式吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 2021-03-15
      相关资源
      最近更新 更多