我在C#中有一个代码,我向用户询问他想要创建的集合数量,然后在这些集合中输入元素。从这些集合中,他选择2组并显示所选集合的并集。
在下面的代码中,集合中的元素未添加到_items,并且不显示Union。
感谢您的帮助。
namespace Union
{
class Program
{
static List<SortedSet<string>> _items = new List<SortedSet<string>>();
static SortedSet<string> set = new SortedSet<string>();
static void Main(string[] args)
{
int i, j, a, b;
string k;
Console.WriteLine("\n Enter the number of set to be used: ");
i = Convert.ToInt32(Console.ReadLine());
for ( j = 1; j <= i; j++)
{
SortedSet<string> set = new SortedSet<string>();
do
{
Console.WriteLine("Enter first element in set {0}:", j);
k = Console.ReadLine();
if (k != "stop")
set.Add(k);
} while (k != "stop");
_items.Add(set);
}
Console.WriteLine("Enter index of 1st set of union:{0}");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter index of 2nd set of union:{0}");
c = Convert.ToInt32(Console.ReadLine());
DisplayUnion(a, b);
}
public static void DisplayUnion(int a, int b)
{
SortedSet<string> set1 = _items[a];
SortedSet<string> set2 = _items[b];
set1.UnionWith(set2);
Console.WriteLine(set1);
}
}
}
答案 0 :(得分:1)
通过修改Main()
和DisplayUnion(int a, int b)
方法来完全编辑我的答案,以实现更好的代表性并包括边境案例场景。
Main()
方法:
static void Main(string[] args)
{
int i, j, a, b;
string k;
Console.WriteLine("Enter the number of sets to be used: ");
i = Convert.ToInt32(Console.ReadLine());
for (j = 1; j <= i; j++)
{
SortedSet<string> set = new SortedSet<string>();
var index = 0;
do
{
index++;
Console.WriteLine($"Enter {index} element in set {j}:");
k = Console.ReadLine();
if (k != "stop")
set.Add(k);
} while (k != "stop");
_items.Add(set);
}
if (_items.Count == 0)
{
Console.WriteLine("You have no sets to union.");
return;
}
if (_items.Count == 1)
{
Console.WriteLine("Union of only set is: " + string.Join("", _items[0]));
return;
}
while (true)
{
Console.WriteLine("Enter index of 1st set of union:{0}");
a = Convert.ToInt32(Console.ReadLine());
if (a < _items.Count)
{
break;
}
Console.WriteLine($"Set {a} does not exists.");
}
while (true)
{
Console.WriteLine("Enter index of 2nd set of union:{0}");
b = Convert.ToInt32(Console.ReadLine());
if (b < _items.Count)
{
break;
}
Console.WriteLine($"Set {b} does not exists.");
}
}
DisplayUnion(int a, int b)
方法:
public static void DisplayUnion(int a, int b)
{
SortedSet<string> set1 = _items[a];
SortedSet<string> set2 = _items[b];
set1.UnionWith(set2);
Console.WriteLine($"Union of set {a + 1} with set {b + 1} is: " + string.Join("", set1));
}
你收到outOfRangeException是因为你输入了一个集合的无效索引而没有检查它实际上是无效的。我通过添加两个while cycles
来解决这个问题。
另外,当集合为0或1时,我为边界情况添加了两个if statements
。
希望它有所帮助。