我不知道出了什么问题,但程序就是不工作。如果你能帮助我,我将不胜感激。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
LinkedList<ulong> integers = new LinkedList<ulong>();
for(ulong i = 1; i <= 10; i++)
{
integers.AddLast(i);
}
Console.Write("Enter an integer: ");
ulong x = ulong.Parse(Console.ReadLine());
Console.WriteLine();
foreach(ulong integer in integers)
{
if(integer > x)
{
integers.Remove(integer);
}
}
integers.AddLast(x);
integers.AddLast(10);
foreach(ulong integer in integers)
{
Console.WriteLine(integer);
}
}
}
我的任务的条件是:创建一个包含10个正整数的LinkedList。完成的列表显示在屏幕上。在键盘上输入一个正整数x,从列表中删除所有大于x的项目,并在x值列表中的最后一个项目后添加一个值为10的项目。显示更改后的列表。
首先需要注意的是,在foreach循环中,您正在修改正在迭代的列表:integers
请先尝试将要删除的项目列表存储在单独的列表中。然后遍历该列表并全部删除。
var toBeDeleted=new List<ulong>;
foreach(ulong integer in integers)
{
if(integer > x)
{
toBeDeleted.Add(integer);
}
}
foreach(ulong item in toBeDeleted)
{
integers.Remove(item);
}
您也可以使用Remove(LinkedListNode(方法。在这种情况下,代码会是这样的(没有测试它,所以你可能需要触摸它才能编译(
var toBeDeleted=new List<LinkedListNode<ulong>>;
foreach(LinkedListNode<ulong> integer in integers)
{
if(integer > x) //might need to cast it to ulong if it doesn't happen automatically.
{
toBeDeleted.Add(integer);
}
}
integers.Remove(toBeDeleted);
我运行了您的代码。您正在删除foreach循环中的项目。尝试使用";对于";循环并从最后一个元素迭代到第一个元素。
class Program
{
static void Main(string[] args)
{
LinkedList<ulong> integers = new LinkedList<ulong>();
for (ulong i = 1; i <= 10; i++)
{
integers.AddLast(i);
}
Console.Write("Enter an integer: ");
ulong x = ulong.Parse(Console.ReadLine());
Console.WriteLine();
for (int i = integers.Count-1; i >= 0; i--)
{
ulong a = integers.ElementAt(i);
if (a > x)
{
integers.Remove(a);
}
}
integers.AddLast(x);
integers.AddLast(10);
foreach (ulong integer in integers)
{
Console.WriteLine(integer);
}
Console.ReadKey();
}
}
C#列表-循环/迭代时删除项目