C#新手求助:如何动态提取数组中的奇数存入新数组并输出?
解决数组提取奇数的问题
嘿,我来帮你排查下代码里的问题,顺便给你几个靠谱的解决方案~
先说说你代码里的核心问题:
- 数组
y一开始没有初始化,直接赋值会引发未初始化的错误; - 每次遇到奇数时,你创建了长度为
counter的新数组,但此时counter初始是0,数组长度为0,之后counter++变成1,再去给y[counter]赋值就会索引越界;而且每次新建数组都会把之前存储的奇数丢掉,根本存不住数据。
另外还有个小细节:rnd.Next(1, 30)生成的是1到29的随机数(因为Next是左闭右开区间),如果要包含30的话,得写成rnd.Next(1, 31)哦。
方案1:用List<int>动态存储(推荐新手使用)
C#里的List<int>是专门用来动态管理集合的类型,它可以自动扩容,不用预先知道元素个数,直接添加就行,非常省心:
int[] x = new int[20]; Random rnd = new Random(); List<int> yList = new List<int>(); // 初始化一个空的List for (int i = 0; i < x.Length; i++) { x[i] = rnd.Next(1, 31); // 生成1-30的随机数 if (x[i] % 2 != 0) { yList.Add(x[i]); // 直接把奇数添加到List里 } } // 如果需要转换成数组类型,只需要调用ToArray()方法 int[] y = yList.ToArray(); // 输出数组Y的内容 foreach (int number in y) { Console.WriteLine(number); }
方案2:用数组实现(先统计个数再填充)
如果一定要用数组的话,可以分两步走:先统计数组X里奇数的总数,再创建对应长度的数组Y,最后把奇数填充进去:
int[] x = new int[20]; Random rnd = new Random(); int oddCount = 0; // 第一步:遍历数组X,统计奇数的个数 for (int i = 0; i < x.Length; i++) { x[i] = rnd.Next(1, 31); if (x[i] % 2 != 0) { oddCount++; } } // 第二步:创建对应长度的数组Y,再遍历X填充奇数 int[] y = new int[oddCount]; int currentIndex = 0; for (int i = 0; i < x.Length; i++) { if (x[i] % 2 != 0) { y[currentIndex] = x[i]; currentIndex++; } } // 输出数组Y的内容 foreach (int number in y) { Console.WriteLine(number); }
这两种方法都能解决你遇到的问题,第一种更简单,适合新手快速上手;第二种能让你更理解数组的长度逻辑~
内容的提问来源于stack exchange,提问作者KacaMat
相关产品推荐
相关产品推荐

