@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());
        }
  • Вопрос задан
  • 88 просмотров
Решения вопроса 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 вообще не играют никакой роли, то тогда опрашивайте количество элементов в списке, перед тем, как пробегаете все значения этого списка....., но не числа.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
08 авг. 2022, в 23:58
10000 руб./за проект
08 авг. 2022, в 23:09
5000 руб./за проект
08 авг. 2022, в 22:26
15000 руб./за проект