Размешивание кнопок при нажатии на другую кнопку
мне нужно чтобы мои кнопки с картинками размешивались при нажатии на кнопку "размешать"(сам не смог реализовать). Нашёл код , но совсем не понял что и зачем автор тут делает(автор англоязычный), можете пожалуйста помочь разобраться что тут и зачем, и если можно приписать комментарии к каждой строке. Конкретно не понятно следующее зачем тут переменная типа bool, что она будет делать в программе, и что идет после while(i<=15) , а также эта строчка Rn = Convert.ToInt32((rnd.Next(0,15))+1);
int i, j, Rn;
int[] a = new int[16];
boolean flag = false;
i = 1;
do
{
Random rnd = new Random();
Rn = Convert.ToInt32((rnd.Next(0, 15)) + 1);
for (j = 1; j <= i; j++)
{
if (a[j] == Rn)
{
flag = true;
break;
}
}
if (flag == true)
{
flag = false;
}
else
{
a[i] = Rn;
i = i + 1;
}
} while (i <= 15);
button1.Text = Convert.ToString(a[1]);
button2.Text = Convert.ToString(a[2]);
button3.Text = Convert.ToString(a[3]);
button4.Text = Convert.ToString(a[4]);
button5.Text = Convert.ToString(a[5]);
button6.Text = Convert.ToString(a[6]);
button7.Text = Convert.ToString(a[7]);
button8.Text = Convert.ToString(a[8]);
button9.Text = Convert.ToString(a[9]);
button10.Text = Convert.ToString(a[10]);
button11.Text = Convert.ToString(a[11]);
button12.Text = Convert.ToString(a[12]);
button13.Text = Convert.ToString(a[13]);
button14.Text = Convert.ToString(a[14]);
button15.Text = Convert.ToString(a[15]);
button16.Text = Convert.ToString(a[16]);
Ответы (1 шт):
Приведенный вами код не размещает никакие кнопки.
Вот комментарии для этого "чуда":
//Переменные i и j используются для циклов
//Rn - дополнительная переменная для сгенерированного случайного числа
int i, j, Rn;
//Номера кнопок
int[] a = new int[16];
//flag == true если сгенерированное число от 1 до 16 есть
//среди уже сгенерированных номеров для кнопок
boolean flag = false;
//Тут ошибка, я думаю что i = 0 должен быть, а не 1
i = 1;
do
{
Random rnd = new Random();
//Генерируем случайное число от 1 до 16
Rn = Convert.ToInt32((rnd.Next(0, 15)) + 1);
//Смотрим чтобы числа Rn не было в массиве a
//тут так же ошибка и j = 0, а не 1
for (j = 1; j <= i; j++)
{
//Если есть flag = true
if (a[j] == Rn)
{
flag = true;
break;
}
}
//Если flag = true, то сбрасываем этот flag
//и следующая итерация будет опять для j-го элемента подбирать уникальный номер
if (flag == true)
{
flag = false;
}
//Иначе мы записываем номер для i-ой кнопки увеличивая i
else
{
a[i] = Rn;
i = i + 1;
}
} while (i <= 15);
//Следующие строки просто присваивают 16-ти кнопкам
//их уникальные сгенерированные номера
button1.Text = Convert.ToString(a[1]);
button2.Text = Convert.ToString(a[2]);
button3.Text = Convert.ToString(a[3]);
button4.Text = Convert.ToString(a[4]);
button5.Text = Convert.ToString(a[5]);
button6.Text = Convert.ToString(a[6]);
button7.Text = Convert.ToString(a[7]);
button8.Text = Convert.ToString(a[8]);
button9.Text = Convert.ToString(a[9]);
button10.Text = Convert.ToString(a[10]);
button11.Text = Convert.ToString(a[11]);
button12.Text = Convert.ToString(a[12]);
button13.Text = Convert.ToString(a[13]);
button14.Text = Convert.ToString(a[14]);
button15.Text = Convert.ToString(a[15]);
button16.Text = Convert.ToString(a[16]);
Код не эффективный, ужасный, имеет ошибка, а так же не делает того, что вам нужно. Если вы новичок, то вам проще будет научиться самому делать, то что вам нужно, а не брать чужой код.