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
相关产品推荐
相关产品推荐

