You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#从二维数组提取正元素生成一维数组时仅显示3个元素的问题

问题分析与解决

你的问题出在一维数组赋值的索引逻辑上:在one_dimensional_array方法中,你用二维数组的行索引i来给B数组赋值(B[i] = A[i,j]),这意味着每行不管有多少个正元素,最终只有该行最后一个正元素会被存到B[i]的位置,而B数组的第3到第8位始终是默认的初始值0,所以看起来只显示了3个正元素。

修正方案

添加一个独立的计数器来跟踪B数组的当前填充位置,每次找到正元素就将其存入B的当前计数器位置,然后计数器自增。

修改后的代码

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: ");
            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];
                        index++; // 存入元素后计数器自增
                    }
                }
            }
            // 只输出已填充的正元素(避免显示未赋值的0)
            for (int i = 0; i < index; i++)
            {
                Console.WriteLine(B[i]);
            }
            // 如果需要显示全部9个元素(包括未填充的0),保留原循环:
            // 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();
        }
    }
}

额外优化建议

如果不确定二维数组中正元素的数量,可以用List<int>来动态存储正元素,不需要预先定义固定大小的数组,这样更灵活:

public void one_dimensional_array()
{
    Console.WriteLine("\nA one-dimensional array with only positive elements: ");
    List<int> positiveElements = new List<int>();
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            if (A[i, j] > 0)
            {
                positiveElements.Add(A[i, j]);
            }
        }
    }
    // 转换为数组(如果需要)
    int[] B = positiveElements.ToArray();
    foreach (int num in B)
    {
        Console.WriteLine(num);
    }
}

内容的提问来源于stack exchange,提问作者mr_evhenii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:15:35