Рандом из массива Button

Рустам Бакытов

Как обратиться элементам массива рандомно? Вот сам код:
array<Button^>^btn=gcnew array <Button^>(12){button1,button2,button3,button4,button5,button6,button7,
                 button8,button9,button10,button11,button12};
                 Random^rand=gcnew Random();
                 for(int i=0;i<=2;i++)
                 {
                    //незнаю что писать
                                       btn=btn[rand()]
                                        // хотел рандомно перемещать баттоны
                 }
Пожалуйста помогите...не работает тот код
5 ответов

Рустам Бакытов

Рустам Бакытов,
array<Button^>^btn=gcnew array <Button^>(12){button1,button2,button3,button4,button5,button6,button7,
                 button8,button9,button10,button11,button12};
Random^rand=gcnew Random();
for(int i=0;i<=2;i++)
{
    int rndIndex = rand->Next(btn->Length);
    Button rndBtn = btn[rndIndex];
    // ...
}


Рустам Бакытов

private: System::Void button13_Click(System::Object^  sender, System::EventArgs^  e) {
                 array<Button^>^btn=gcnew array <Button^>(11){button2,button3,button4,button5,button6,button7,
                 button8,button9,button10,button11,button12};
 
                 Button^SelectRnd=gcnew Button();
 
                 Random^rand=gcnew Random();
 
                 for(int i=0;i<=btn->Length;i++)
                 {
                    int rndIndex = rand->Next(btn->Length);
                     SelectRnd->Location=button1->Location;
                    button1->Location=btn[rndIndex]->Location;
                    btn[rndIndex]->Location=SelectRnd->Location;
                    
                 }
             }
Отдуши Спасибо... Каково твое мнение на этот код менять рандомно местами баттоны...
Button rndBtn = btn[rndIndex];
Ругался нет конструктора копии... написал иначе... Напиши свое мнение мне это очень важно))


Рустам Бакытов

Сообщение от OwenGlendower
Button rndBtn = btn[rndIndex];
Ругался нет конструктора копии... написал иначе...
Забыл про ^. Нужно было так:
Button^ rndBtn = btn[rndIndex];
Каково твое мнение на этот код менять рандомно местами баттоны
Создавать кнопку только ради сохранения координаты немного избыточно, тебе не кажется?
private: System::Void button13_Click(System::Object^  sender, System::EventArgs^  e) {
     array<Button^>^btn=gcnew array <Button^>(11){button2,button3,button4,button5,button6,button7,button8,button9,button10,button11,button12};
 
     Random^rand=gcnew Random();
 
     for(int i=0;i<=btn->Length;i++)
     {
        int rndIndex = rand->Next(btn->Length);
        Point tempLocation = button1->Location;
        button1->Location=btn[rndIndex]->Location;
        btn[rndIndex]->Location=tempLocation;
     }
}
Строку №9 можно еще записать так
auto tempLocation = button1->Location;
И советую посмотреть алгоритм тасования Фишера-Йетса.


Рустам Бакытов

алгоритм тасования Фишера-Йетса.
Прочитал да этот метод очень хорош... Вот только я незнаю перезаписывать массив заново или создать массив из выбранных рандомных элементов и задать условие что будущий ранд/й элемент не равно массиву созданного... Я очень заинтересован вот только незнаю как это реализовать.. И к слову
Создавать кнопку только ради сохранения координаты немного избыточно, тебе не кажется?
Мне нужно ко многому научиться...


Рустам Бакытов

OwenGlendower, Здравствуйте если у вас будет ваше драгоценное время помогите пожалуйста мне с кодом...Дело в том что когда происходит перемещение picture/x :
array<PictureBox^>^select = gcnew array<PictureBox^>(16){
            pictureBox2,pictureBox3,pictureBox4,pictureBox5,pictureBox6,pictureBox7,
            pictureBox8,pictureBox9,pictureBox10,pictureBox11,pictureBox12,
            pictureBox13,pictureBox14,pictureBox15,pictureBox16,pictureBox17};
            for(int i=0;i<=select->Length;i++)
                 {
                    int rndIndex = rand->Next(select->Length);
                      Point tempLocation = pictureBox18->Location;
                    pictureBox18->Location=select[rndIndex]->Location;
                     select[rndIndex]->Location=tempLocation;
                 }
один picture/x : накладывается на другой только 1 и незнаю почему а picture/x : состоящий из 9 при перемещении(рандомно) не накладывается..Разобрался...))