如何在循环中保存List<int>找到的元素避免被覆盖并用于比较
解决方法:正确保存第一个1的变量并避免循环覆盖
你的问题核心是变量作用域的问题——原代码里的temp和count都声明在for循环内部,每次循环迭代都会重新创建并初始化,根本没法保留第一个1的值,更没法用来和其他元素持续比较。
按你的需求,正确的做法是把要保留的变量(比如第一个1的值)和计数变量都放到循环外部声明,先找到第一个1,再用它去和列表里的其他元素对比。
修改后的代码(通用版)
public static void Main() { List<int> list = new List<int>(); list.Add(0); list.Add(0); list.Add(1); list.Add(1); list.Add(0); list.Add(0); list.Add(1); // 变量声明在循环外部,避免每次循环被重新初始化 int firstOne = -1; // 初始值设为非0/1的数,标记还没找到第一个1 int count = 0; // 第一步:找到第一个值为1的元素并保存 foreach (int num in list) { if (num == 1) { firstOne = num; break; // 找到第一个就退出循环,避免多余操作 } } // 确认找到第一个1后,再和其他元素比较 if (firstOne != -1) { foreach (int num in list) { if (num == firstOne) { count++; } } Console.WriteLine($"和第一个1相同的元素总数:{count}"); } else { Console.WriteLine("列表中没有1"); } }
针对原代码“和下一个元素比较”的调整版
如果你的需求是用第一个1和它之后的元素逐个对比(对应原代码里的list[i+1]逻辑),可以改成这样:
public static void Main() { List<int> list = new List<int>(); list.Add(0); list.Add(0); list.Add(1); list.Add(1); list.Add(0); list.Add(0); list.Add(1); int firstOne = -1; int count = 0; int firstIndex = -1; // 找到第一个1的位置和值 for (int i = 0; i < list.Count; i++) { if (list[i] == 1) { firstOne = list[i]; firstIndex = i; break; } } if (firstIndex != -1) { // 从第一个1的下一个元素开始遍历比较 for (int i = firstIndex + 1; i < list.Count; i++) { if (list[i] == firstOne) { count++; } } Console.WriteLine($"第一个1之后,相同元素的数量:{count}"); } else { Console.WriteLine("列表中没有1"); } }
核心关键点
- 要保留的变量(
firstOne、count)必须在循环外部声明,这样整个程序执行过程中只会初始化一次,不会被循环覆盖 - 先单独遍历找到第一个1,找到后立刻停止遍历,避免多余操作
- 后续的比较逻辑基于已保存的变量,确保不会被循环内的赋值操作覆盖
内容的提问来源于stack exchange,提问作者Giorgi Tamazashvili
相关产品推荐
相关产品推荐

