我在C#中创建了二维列表,当我想打印项目时,它没有显示任何内容,但列表不是空的。
public static List<List<string>> GetSymetricOrder(List<List<string>> main_list){
List<List<string>> new_main_list = new List<List<string>>();
List<string> list = new List<string>();
for(int i=0;i<main_list.Count;i++){
for(int j=0;j<main_list[i].Count;j+=2){
list.Add(main_list[i][j]);
}
if(main_list[i].Count % 2 == 0){
for(int k = main_list[i].Count-1;k>=0;k-=2){
list.Add(main_list[i][k]);
}
}else{
for(int l = main_list[i].Count-2;l>=0;l-=2){
list.Add(main_list[i][l]);
}
}
new_main_list.Add(list);
list.Clear();
}
return new_main_list;
}
public static void Display(List<List<string>> new_main_list){
int i = 1;
foreach(var list in new_main_list){
Console.WriteLine("SET"+i);
foreach(var s in list){
Console.WriteLine(s);
}
i++;
}
}
public static void Main(string[] args)
{
int num;
List<List<string>> main_list = new List<List<string>>();
List<string> list = new List<string>();
while((num = int.Parse(Console.ReadLine()))!=0){
for(int i=0;i<num;i++){
string input = Console.ReadLine();
list.Add(input);
}
main_list.Add(list);
list.Clear();
}
List<List<string>> SymetricOrder = GetSymetricOrder(main_list);
if(SymetricOrder != null){
Display(SymetricOrder);
}
上面的代码在main方法的列表list
中接收输入字符串,并将列表添加到main_list
。这将在GetSymetricOrder
中处理,并使用Display
方法显示。该列表实际上不是空的,因为行:
if(SymetricOrder != null){
Display(SymetricOrder);
}
实际上在Console.WriteLine("SET"+i);
方法中打印Display
,但没有列表项。以下是示例输入:
4
AAA
AA
AAA
AA
3
BBB
BB
BBB
2
RERE
RE
0
以下是打印结果:
SET1
SET2
SET3
没有打印列表项,也不知道为什么。我有什么遗漏的吗?谢谢你。
答案 0 :(得分:2)
问题在于&#34;列表&#34;变量。您将其添加到&#34; main_list&#34;然后清除它=&gt; &#34; main_list&#34;中的列表也被清除了。
基本上你不能重复使用&#34; list&#34;变量,从那以后&#34; main_list&#34;只包含一个实例多次。解决这个问题的一个简单方法就是将新列表分配给&#34;列表&#34;变量而不是清除它。