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

将数组x的重复元素存入数组y的C#代码问题排查求助

问题分析与解决方案

我来帮你梳理下代码里的问题,以及对应的修复方案:

问题根源

  • 内层循环的break位置错误:你在else分支外部直接加了break语句,这导致内层循环只执行一次(仅检查j=i+1的位置)就立刻退出,完全没机会遍历后续元素查找重复项。哪怕x[i]在后面的位置有重复,代码也根本不会去检查。
  • 重复元素会被多次存入y数组:即使去掉break,当前逻辑只要找到一个匹配项就往y里加,会导致同一个重复元素被多次存入(比如数组中有3个2,会被添加两次),不符合“每个重复元素仅存入一次”的需求。
  • else分支逻辑错误:每次x[i] != x[j]就输出“没有重复元素”,这显然不合理——只是当前j位置的元素和i不重复,不代表整个数组中没有重复项。

修正后的代码(基础循环实现)

// 初始化随机生成的数组x
int[] x = new int[20];
Random rnd = new Random();
for (int i = 0; i < x.Length; i++)
{
    x[i] = rnd.Next(1, 15);
}

// 用List存储重复元素(避免固定数组的长度限制)
List<int> yList = new List<int>();

for (int i = 0; i < x.Length; i++)
{
    // 如果当前元素已经被标记为重复,跳过后续检查
    if (yList.Contains(x[i]))
        continue;

    bool isRepeated = false;
    // 遍历当前元素之后的所有元素,查找重复
    for (int j = i + 1; j < x.Length; j++)
    {
        if (x[i] == x[j])
        {
            isRepeated = true;
            break; // 找到一个重复即可停止当前元素的检查,提升效率
        }
    }

    // 如果确认是重复元素,加入结果列表
    if (isRepeated)
    {
        yList.Add(x[i]);
        Console.WriteLine($"找到重复元素: {x[i]}");
    }
}

// 转换为int数组(如果需要数组类型的结果)
int[] y = yList.ToArray();

更简洁的LINQ实现(C# 3.0+)

如果你熟悉LINQ,可以用更简洁的代码实现需求,逻辑更清晰:

// 初始化随机数组
int[] x = new int[20];
Random rnd = new Random();
for (int i = 0; i < x.Length; i++)
{
    x[i] = rnd.Next(1, 15);
}

// 通过LINQ分组筛选重复元素
int[] y = x.GroupBy(num => num)
           .Where(group => group.Count() >= 2) // 筛选出现次数≥2的元素组
           .Select(group => group.Key) // 取出重复元素的值
           .ToArray();

// 输出结果
foreach (int num in y)
{
    Console.WriteLine($"重复元素: {num}");
}

调试建议

测试时可以先把随机数组换成固定的测试用例(比如int[] x = {2,5,7,2,8};),这样更容易验证代码逻辑是否正确,避免随机数带来的不确定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:01