У меня есть этот код:
static int[] a = {0 , 10 , 20, 30, 40};
public static void Main()
{
for (int i = 0; i < 10; i++){
int[] array = a;
for (int j = 1; j < array.Length; j++)
array[j] += array[j - 1];
Console.WriteLine(array[4]);
}
}
В консоли получаю следующий результат:
100
200
350
560
840
Но я этого не ожидал или это не то, что я хочу. Я хотел следующий результат:
100
100
100
100
100
Я понятия не имею, почему это происходит. Как я могу это решить?
int[] array = a это не создает копию списка, а указывает на исходный список. Таким образом, любая мутация в array отражается в a.
Прочтите это: stackoverflow.com/questions/1533757/…
делай int[] array = a.Clone() as int[];
Как упоминалось другими, массив относится к исходному массиву. Но если вам просто нужно сделать сумму элементов входного массива (a), то вы делаете это, используя только int var sum =0; вместо int[] array = a и печатаете a,





Кажется, что, выполняя int[] array = a, вы имеете дело со ссылкой на a, поэтому каждый раз, когда вы изменяете array (в цикле j for), вы обновляете массив a. В следующем цикле значение a останется с ранее обновленным значением.
Взгляните на метод Копировать.
Вы можете клонировать массив
static int[] a = { 0, 10, 20, 30, 40 };
public static void Main()
{
for (int i = 0; i < 10; i++)
{
int[] array = (int[])a.Clone();
for (int j = 1; j < array.Length; j++)
array[j] += array[j-1];
Console.WriteLine(array[4]);
}
}
Используйте это: int[] array = a.ToArray(); вместо int[] array = a;
Массив в С# является ссылочным типом, а не типом значения, таким как int, поэтому, когда вы устанавливаете a в массив, a и массив являются одним и тем же объектом.
Ваша проблема - ссылка на объект. Вы можете попробовать это.
for (int i = 0; i < 10; i++)
{
int[] array = new int[5];
for (int e = 0; e < array.Length; e++)
{
array[e] = a[e];
}
for (int j = 1; j < array.Length; j++)
array[j] += array[j - 1];
Console.WriteLine(array[4]);
}
Какова логика кода? Почему вы ожидаете 100 только на выходе?