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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:37