循环结果不正确

Posted

技术标签:

【中文标题】循环结果不正确【英文标题】:Incorrect loop result 【发布时间】:2021-12-18 08:24:35 【问题描述】:

第一个数组是随机填充的,它的长度是从控制台设置的。我有一个数组,我需要在其中编写一个重复数字的子数组和重复数字的数量。例如3 3 3 3 3 4,3 3 3 3是重复的数字,4是它们的数字。

问题是如果数组末尾有重复的数字,循环不会输出它们,如果我进入调试模式,我可以看到并不是所有的数字都被写入。可能是什么问题?

for (int i = 1; i < array.Length; i++)

    if (array[i - 1] == array[i])
    
        if((i + 1) != array.Length)
        
            duplicateCount++;
            addArray = array[i - 1];
            duplicate += addArray + " ";                        
        
        else
        
            duplicateCount++;
            lastElement = array[i - 1];
            duplicate += lastElement;
                         
    
    else
                        
        if (duplicateCount != 1)
        
            addPrevious = array[i - 1];
            duplicate += addPrevious + " ";
            duplicateArrays.Add(duplicate + duplicateCount);
            duplicate = "";
            duplicateCount = 1;
        
        else
        
            duplicateCount = 1;
        
    


duplicateArrays.Add(duplicate + duplicateCount);      

【问题讨论】:

你的问题不清楚,你能用一个例子澄清你在问什么。我建议您仔细阅读 SO tour 部分,因为它显示了 SO 的工作原理。 How to Ask 部分可能会有所帮助。此外,您可能会发现 SO Asking 部分很有用。 不清楚你在问什么,但很可能你只需要使用 GroupBy 您是想说从一个大随机数组中创建各种子数组,这些子数组将具有来自该大随机数组的重复数字,并且最后一个元素包含一个数字,该数字表示如何之前的元素多次出现在子数组中? 如果我对你的问题的理解是正确的,我已经创建了一个代码来做你想做的事情。请检查这是否是您所期望的:onlinegdb.com/dD2_LJgnY @AbhinavPandey,它有效,谢谢 【参考方案1】:

虽然 Antidisestablishmentarianism 代码最短,但它使用 ^',它是 C# 8.0 中引入的 index from end 运算符。我对此并不在意,但这是一个值得了解的区别。在旧版本中编译相同的代码会产生编译时异常。我将给出一个很长但对初学者友好的代码,如果你读两遍,它就会很容易理解。

static void Main(string[] args)

    int[] RandomArray = new int[]  1, 2, 2, 3, 4, 4, 3, 1, 5, 2, 9, 8, 9, 8, 8, 5, 3, 4, 1 ;
    int RandomArrayLength = RandomArray.Length;
    List<int[]> SubArrayList = new List<int[]>();
    List<int> visited = new List<int>();
    for (int i = 0; i < RandomArrayLength; i++)
    
        int elem = RandomArray[i];
        if (!visited.Contains(elem))
        
            visited.Add(elem);
            List<int> templist = new List<int>();
            for (int j = 0; j < RandomArrayLength; j++)
            
                if (elem == RandomArray[j])
                
                    templist.Add(elem);
                
            
            if (templist.Count > 1) //You can remove this condition if you want to include all the elements
            
                int elemCount = templist.Count;
                List<int> sublist = new List<int>();
                sublist.AddRange(templist);
                sublist.Add(elemCount);
                SubArrayList.Add(sublist.ToArray());
            
        
        else
        
            continue;
        
    
    int SubArrayListCount = SubArrayList.Count;
    for (int i = 0; i < SubArrayListCount; i++)
    
        int[] SubArr = SubArrList[i];
        int SubArrCount = SubArr.Length;
        for (int j = 0; j < SubArrCount; j++)
        
            Console.Write(SubArr[j].ToString() + " ");
        
        Console.WriteLine();
    

【讨论】:

以上是关于循环结果不正确的主要内容,如果未能解决你的问题,请参考以下文章

运行 SYCL 代码时结果不正确。在尝试并行化循环时

OpenMP 嵌套循环任务并行性,计数器未给出正确结果

vb.net 循环查询结果

Script循环语句 的相关知识跟练习

Cuda for 循环疑问

如何使用Mockito正确模拟每个循环?