2016-09-27 2 views
-2

Ich habe ein Shuffling-Programm erstellt, das ein 5X5-Array und einen Vektor verwendet. Der Vektor sollte die Werte 1 bis einschließlich 25 speichern und das Array sollte nur 0 für jedes Element haben. Sobald die Funktion shuffle() übergeben wurde, sollte sie die Werte 1 bis 25 des Vektors im Array zufällig positionieren.Shuffling-Funktion funktioniert nicht richtig

void Match::shuffle() { 

    std::vector<int> vec(25); 

    int randNum = rand() % (vec.size()); 

    for (int i = 1; i < 26; i ++) { 
      vec.push_back(i); 
    } 
    for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 5; j++) { 
      backArr[i][j] = vec.at(randNum); 
      vec.erase(vec.begin() + randNum); 

      randNum = rand()%vec.size(); 
      } 
    } 

}

+2

Es ist schwierig, Lösungen anzubieten, wenn die Problemstellung einfach lautet: "Es funktioniert nicht". Bitte [bearbeiten] Sie Ihre Frage, um eine ausführlichere Beschreibung dessen zu geben, was Sie erwartet haben und wie sich das von den tatsächlichen Ergebnissen unterscheidet. Sehen Sie [fragen] nach Hinweisen auf, was eine gute Erklärung macht. –

+0

[MCVE] wird benötigt. –

+0

http://stackoverflow.com/questions/6127503/shuffle-array-in-c. Das könnte helfen –

Antwort

0

In dem letzten Durchlauf (d.h. nach backArr[i][j] gesetzt wurde) Sie das letzte Element aus dem Vektor entfernen und randNum = rand()%vec.size(); berechnen, die rand() % 0 berechnet, die fehlschlagen.

Berechnen Sie einfach randNum vor backArr[i][j] = vec.at(randNum); (entfernen Sie auch die randNum vor den Schleifen).

Nachtrag: Wie von in den Kommentaren @infixed, können Sie auch einen Vektor von 25 (default-initialisiert) Elemente erstellen und drücken Sie anschließend 25 weitere Elemente (aufgrund dieser, der erste Teil meiner Antwort ist eigentlich nicht wahr). Um das zu lösen, müssen Sie entweder die (25) bei der Deklaration vec entfernen oder die push_back Anweisungen durch entsprechende Vektorzugriffe ersetzen (beachten Sie die Off-by-1).

+0

Vielen Dank das hilft sehr. – Drew

0

Warum nicht std :: random_shuffle verwenden?

+0

Ich möchte vermeiden, mit std: random_shuffle – Drew