我有一個簡單的遞歸程序來查找給定字符串的所有不同的排列。我正在使用遞歸函數go()
來計算排列,並使用List<char[]>
來存儲排列。經過計算後,函數會檢查排列是否已經存在於List<char[]>
中。如果沒有,它會被添加到列表<>中。不能在C#列表中添加新值<char[]>
現在,這裏是問題,排列得到完美計算,但是當我嘗試將它們添加到列表中,它不會添加當前值。這是添加的代碼。
List<char[]> l;
public void go(char[] list, int k, int m)
{
if (k == m)
{
Console.WriteLine(list); //print to check
l.Add(list); //add it to the list
}
// more code
}
現在對於輸入= ABC,我得到下面的輸出..
ABC
ACB
BAC
BCA
CBA
CAB
這是正確的,因爲我是直接打印出來。但是當我列出清單時,我就收到了。
ABC
ABC
ABC
ABC
ABC
ABC
現在我知道我只是在一個簡單的錯誤,但我找不出什麼。我已經嘗試了一堆不同的方式,但似乎沒有任何工作,我無法在互聯網上找到任何答案。 Here is the complete code。
@EugenePodskal能否詳細說明一下,我是c#中的新手,而且我不瞭解這與我的問題有什麼關係? –
雖然你沒有顯示[再現問題](http://stackoverflow.com/help/mcve)的代碼,但顯然你的'char [] list'總是相同的引用,因此所有的' l.Add(list);'實際上添加了相同的值,將被以下調用改變。 'l'中的每一項都是**相同的**引用,它引用相同的數組,這個數組顯然可以只包含一個值。 –
所以爲什麼它會在語句'Console.WriteLine(list)'中輸出正確的值,並且不會在下一個語句'l.add(list);'中的列表中添加正確的值,對於格式不正確的問題..雖然我已經添加了一個鏈接到問題的完整代碼和[這裏又是](https:// ideone。com/x4664R) –