因此似乎找不到解决我问题的任何解决方案: 我得到一个字符串(让我们说abcd),我需要每次旋转一次字符并将其存储到word_length的列表(或数组)中!很多次(!表示阶乘)。到目前为止,我的工作正常,并且可以完成我想要的工作(如果我在将每个值添加到列表中之前和之后打印出每个值,则可以正常打印),除非仅在最后打印出列表中的所有值,由于某些原因,我不知道为什么,列表中的所有值都与最后分配的值相同。我尝试了很多不同的方法,包括每次将其分配给新变量,添加到数组而不是列表等。我很确定这与内存地址或某些东西有关。谁能帮忙。这是我的代码:
static void Main(string[] args)
{
string word = "abcd";
int word_length = word.Length;
char[] word_arr = word.ToCharArray();
List<char[]> list = new List<char[]>();
list.Add(word_arr);
while (list.Count < Factorial(word_length))
{
word_arr = RotateLetters(word_arr);
list.Add(new_array);
}
list.ForEach(Console.WriteLine);
}
public static int Factorial(int n)
{
int result = 1;
while (n > 0)
result *= (n--);
return (result);
}
private static char[] RotateLetters(char[] word_arr)
{
int i = 0, l = word_arr.Length - 1;
char tmp = word_arr[0];
while (i < l)
{
word_arr[i] = word_arr[i + 1];
i++;
}
word_arr[l] = tmp;
return (word_arr);
}
public static void Swap(ref char a, ref char b)
{
if (a == b)
return;
char tmp = a;
a = b;
b = a;
}
答案 0 :(得分:2)
您正在将对同一数组的引用添加到列表中。列表中的每个条目都引用内存中的同一数组,因此当您修改数组时,它们会更改显示在每个列表项中。您需要添加一个副本。试试:
list.Add((char[])word_array.Clone());