@teilzteilzteilzteilz

Поменять местами 1ый отрицательный и последний положительный элементы в матрице. Как исправить ошибку?

Столкнулся с небольшой проблемой. Как исправить ошибку при перестановке элементов в матрице? Мне нужно поменять первый отрицательный и последний положительный элементы в выводимом массиве. При выводе во 2й listBox у меня некорректно выводится результат. Как исправить данную проблему?
private void button2_Click(object sender, EventArgs e)
        {
            int indexOfNegativeElement = -1;
            int indexOfPositiveElement = -1;

            for (int i = 0; i < 10; i++)
            {
                if (mas[i] < 0)
                {
                    listBox2.Visible = true;
                    indexOfNegativeElement = i;
                    break;
                }

                else
                {
                    label1.Visible = true;
                    
                }
            }

            for (i = 9; i > -1; i--)
            {
                if (mas[i] > 0)
                {
                    listBox2.Visible = true;
                    indexOfPositiveElement = i;
                    break;
                }

                else
                {
                    label1.Visible = true;
                    
                }
            }

            if (indexOfNegativeElement >= 0 && indexOfPositiveElement <= 0)
            {
                int temp = mas[indexOfNegativeElement];
                mas[indexOfNegativeElement] = mas[indexOfPositiveElement];
                mas[indexOfPositiveElement] = temp;
            }
            listBox2.Items.Add(mas[i].ToString());

            if (indexOfNegativeElement <= 0 && indexOfPositiveElement >= 0)
            {
                int temp = mas[indexOfNegativeElement];
                mas[indexOfNegativeElement] = mas[indexOfPositiveElement];
                mas[indexOfPositiveElement] = temp;
            }
            listBox2.Items.Add(mas[i].ToString());
        }
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
@Myclass
Не сильно вдавался в логику, но что сразу бросилось в глаза, то что переменная indexOfPositiveElement получает инит.значеие -1, и потом по всяким проверкам может и не изменится. После этого вы проверяете её на меньше или равно нулю. И в этом случае даже без того, что вы обнаружили положительный эелемент, вы всё равно хотите переставлять значения. Тоже самое и с переменной indexOfNegativeElement. Оба места я отметил жирным шрифтом.

if (indexOfNegativeElement >= 0 && indexOfPositiveElement <= 0)
{
int temp = mas[indexOfNegativeElement];
mas[indexOfNegativeElement] = mas[indexOfPositiveElement];
mas[indexOfPositiveElement] = temp;
}
listBox2.Items.Add(mas[i].ToString());

if (indexOfNegativeElement <= 0 && indexOfPositiveElement >= 0)
{
int temp = mas[indexOfNegativeElement];
mas[indexOfNegativeElement] = mas[indexOfPositiveElement];
mas[indexOfPositiveElement] = temp;
}
listBox2.Items.Add(mas[i].ToString());


А вообще я посоветовал-бы вам названия кнопок и листков итд. называть так, что они из себя представляют. Т.е. кнопка например или "btnSwapPairItems", или если не комильфо без ""btn. Это первое. Второе, у вас есть в этой функции одно и то-же повторяющее действие. Выведите его в отдельную функцию. Например назовите её "SwapPairItemsInList" и передайте ей параметры первого и второго элемента, которые должны быть переставлены и вызывайте эту функцию кадый раз (здесь уже два раза), когда надо переставить два елемента. Если такое повторяется не только в этом окне и не только с этим списком, а в 100 других местах, то выведите эту функцию в отдельный класс и увеличьте параметер этой фукции ещё одним - Reference на этот лист-контроль. И всё - вам никогда больше не надо будет ручками это опять набивать. Жалейте своё время.

После просмотра обратил ещё на одну вещь внимание. Никогда не используйте просто числа, как у вас в циклах проверок. Все эти 9 и 10 - сегодня вы знаете, почему 9 и 10, завтра - нет. Сегодня 9, завтра 900. Вам что весь код переписывать. Для таких вещей всегда используйте константы или именно в этом окне, если это значение играет роль не только в этом окне, но и в других выводите в отдельный класс со всеми константами по этой тематике. Обзываете её например " public const Int32 MaxItemsInSwapList = 9", и используйте её здесь в функции и всё - и через 9 лет вы в курсе, что эта 9 значит. Или, если 10 или 9 вообще не играют никакой роли, то тогда опрашивайте количество элементов в списке, перед тем, как пробегаете все значения этого списка....., но не числа.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы