Добавление элемента в список list - C#
Формулировка задачи:
В список нужно на каждой итерации добавить новый элемент, при этом, сохранить добавленные раннее.
Но здесь почему-то в списке остается только элемент, добавленный на последней итерации. Остальные магическим образом исчезают. Переменная n показывает количество элементов в списке (1), а должно быть 5. Помогите разобраться в чем дело.
List<Tuple<int, int>> toDel = new List<Tuple<int, int>>(); toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
for (int x = 0; x < 5; x++) { GetMinstr(matrix); GetRowReduction(matrix); GetMinstolb(matrix); GetReductionCollumn(matrix); ShowMasInDataGrid(dataGridView1, matrix); List<Tuple<int, int, int>> allZero = new List<Tuple<int, int, int>>(); int rowCount = matrix.GetLength(0); int collumnCount = matrix.GetLength(1); for (int i = 0; i < rowCount; i++) for (int j = 0; j < collumnCount; j++) if (matrix[i, j] != 500) if (matrix[i, j] == 0) { int minIValue = Int32.MaxValue; int minI = Int32.MaxValue; int minJValue = Int32.MaxValue; int minJ = Int32.MaxValue; for (int a = 0; a < collumnCount; a++) { if (matrix[a, j] < minIValue && a != i) minIValue = matrix[a, j]; minI = a; } for (int a = 0; a < collumnCount; a++) { if (matrix[i, a] < minJValue && a != j) minJValue = matrix[i, a]; minJ = a; } allZero.Add(new Tuple<int, int, int>(minIValue + minJValue, i, j)); } int k; k = allZero.Count; listBox1.Items.Add(k); allZero.Sort((a, b) => a.Item1.CompareTo(b.Item1)); //ВОТ ЭТОТ СПИСОК List<Tuple<int, int>> toDel = new List<Tuple<int, int>>(); List<Tuple<int, int>> optim = new List<Tuple<int, int>>(); //ДОБАВЛЯЮ ЭЛЕМЕНТ toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3)); optim.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3)); int z = optim.Count; //Удаление int n = toDel.Count; //КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ for (int i = 0; i < collumnCount; i++) { for (int j = 0; j < rowCount; j++) { if (i == toDel[n - 1].Item1) matrix[i, j] = 500; if (j == toDel[n - 1].Item2) matrix[i, j] = 500; matrix[toDel[n - 1].Item2, toDel[0].Item1] = matrix[0, 0]; } } for (int i = 0; i < rowCount; ++i) { List<string> aa = allZero.Select(t => t.ToString()).ToList(); List<string> bb = toDel.Select(t => t.ToString()).ToList(); //List<string> cc = toDel.Select(t => t.ToString()).ToList(); label1.Text = string.Join(" ", aa); label2.Text = string.Join(" ", bb); //ПОКАЗЫВАЮ СПИСОК В ЛЕЙБЛЕ. ТАМ ВСЕГО ОДИН КОРТЕЖ label3.Text = string.Join(" ", n);// КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ =1. ПОЧЕМУ? } }
Решение задачи: «Добавление элемента в список list»
textual
Листинг программы
public static int[] GetMinstr(int[,] matrixa) { int rowCount = matrixa.GetLength(0); int collumnCount = matrixa.GetLength(1); int[] minstr = new int[5]; //Нахождение минимума по строкам for (int i = 0; i < rowCount; ++i) { int minRow = matrixa[0, 0]; for (int j = 0; j < collumnCount; ++j) { if (matrixa[i, j] != 500) { if (minRow > matrixa[i, j]) minRow = matrixa[i, j]; } } minstr[i] = minRow; } return minstr; } public static void GetRowReduction(int[,] matrixa) { //Редукция строк int rowCount = matrixa.GetLength(0); int collumnCount = matrixa.GetLength(1); int[] b = GetMinstr(matrixa); for (int i = 0; i < rowCount; ++i) { for (int j = 0; j < collumnCount; ++j) { if (matrixa[i, j] != 500) { matrixa[i, j] = matrixa[i, j] - b[i]; } } } } public static int[] GetMinstolb(int[,] matrixa) { //List<int> minstolb = new List<int>(); int rowCount = matrixa.GetLength(0); int collumnCount = matrixa.GetLength(1); int[] minstolb = new int[5]; //Нахождение минимума по стролбцам for (int i = 0; i < rowCount; ++i) { int minCol = matrixa[0, 0]; for (int j = 0; j < collumnCount; ++j) { if (matrixa[j, i] != 500) { if (minCol > matrixa[j, i]) minCol = matrixa[j, i]; } } minstolb[i] = minCol; } return minstolb; } public static void GetReductionCollumn(int[,] matrixa) { //List<int> minstolb = new List<int>(); int rowCount = matrixa.GetLength(0); int collumnCount = matrixa.GetLength(1); int [] a = GetMinstolb(matrixa); //Редукция столбцам for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { if (matrixa[i, j] != 500) { matrixa[i, j] = matrixa[i, j] - a[j]; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д