2017-04-09 53 views
0

我有一個關於將大量數組存儲到列表中的問題。將大量數組存儲到每個循環中的列表中

首先,我初始化數組和列表:

int[] arr = new int[9]; 
List<int[]> forkarr = new List<int[]>(); 

然後我通過for循環大量的運行和每次修改陣列以產生所有可能的井字變化。當循環遍歷所有這些變體時,如果陣列是可能的電路板,那麼我打印它,另外如果陣列滿足某些「分叉」條件,那麼我將它添加到列表中:

if (ForkCheck.fork(arr)) { forkarr.Add(arr); Console.WriteLine("It's a Fork!");} 

這也打印該消息,讓你知道特定的數組是叉。

現在,當我打印所有的數組時,那些叉子被正確打印並標記爲這樣。

然而,當我去打印出所有我的列表forkarr的INT []的元素,像這樣的:

foreach (int[] arry in forkarr) 
      { 
       PrintGame.print(arry);//this is my method that prints the array 
       Console.WriteLine(); 
      } 

出於某種原因每個陣列變爲一個相同的:

222 
222 
222 

(我使用2作爲'X'和1作爲'O'和0作爲'空'btw)

而且它只是反覆打印出所有的叉。

因此,當我將數組的每個修改都添加爲列表中的新元素時,出現了一些問題,我想,但我不知道爲什麼。

感謝您的任何幫助。

回答

1

因爲您正在修改相同的數組並將其添加到列表中。每次用一個陣列陣列完成時間,你需要創建一個新的實例是這樣的:

arr = new int[9]; 

這將創建一個新的參考,這將是獨立於其他陣列。修改它的元素不會影響其他元素。

有關價值VS引用類型,你可以參考下面這個問題的更多信息:

What is the difference between a reference type and value type in c#?

+0

非常感謝!我覺得這很簡單 – Schweeb

相關問題