这里有一些代码:
foreach (int[] temp in intList)
{
string str = GenerateGamma(0,1,10,temp);
if (str == "924890128")
answer.Add(temp);
}
intList
中有int数组,每个数组都有以下属性:array[1] = 1
(数组长度为10)。好吧,当我查看answer
时,我看到了数组1 4 6 0 9 3 2 7 5 8
,所以array[1] = 4
。
这是代码GenerateGamma()
。
public static string GenerateGamma(int i0, int j0, int m, int[] b)
{
Constants ct = new Constants();
int[] gamma = new int[9];
int[] inside_array = b;
string result = "";
int temp_i = i0, temp_j = j0, inttemp = 0;
for (int t = 1; t <= 9; t++)
{
temp_i = ((temp_i + 1) % m);
temp_j = ((temp_j + inside_array[temp_i]) % m);
inttemp = inside_array[temp_i];
inside_array[temp_i] = inside_array[temp_j];
inside_array[temp_j] = inttemp;
gamma[t-1] = (inside_array[(inside_array[temp_i]+inside_array[temp_j])%m]%m);
}
result = string.Join("",gamma);
return result;
}
答案 0 :(得分:0)
数组是引用类型,如果更改GenerateGamma()
方法中传递的数组,原始数组也将被更改。
您的数组已更改,因为您拥有内部方法:
int[] inside_array = b;
在这里,您不创建传递数组的副本,只需创建对数组的引用副本。因此,您有一个数组和两个引用(b
和inside_array
),它们指向同一个数组:b[0] = 1;
和inside_array[0] = 1;
执行相同操作 - 它们修改相同的数组。
如果你想复制:
int[] inside_array = new int[b.Length];
for (int a = 0; a < inside_array.Length; a++)
{
inside_array[a] = b[a];
}
在此之后,您将拥有两个数组,当您更改一个数组时,另一个数组将不会更改。