2016-09-27 149 views
-2

我創建了一個使用5X5陣列和矢量的混洗程序。向量應該存儲1到25的值,數組對每個元素應該只有0。一旦shuffle()函數被傳遞,它應該隨機地將矢量的1到25的值放在數組中。混洗功能無法正常工作

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

當問題陳述簡單地說「它不起作用」時,很難提供解決方案。請[編輯]您的問題,以更全面地描述您預期會發生什麼以及與實際結果有何不同。看[問]提示什麼是一個很好的解釋。 –

+0

[MCVE]是必要的。 –

+0

http://stackoverflow.com/questions/6127503/shuffle-array-in-c。這可能有助於 –

回答

0

在最後一次運行(backArr[i][j]已被設置,即,後)從載體中刪除最後元件和計算randNum = rand()%vec.size();其計算rand() % 0將失敗。

只需在backArr[i][j] = vec.at(randNum);之前計算randNum(也可以在循環前刪除randNum)。

附錄:正如在評論@infixed指出的那樣,你還可以創建25個(默認初始化)元素的向量,後來推額外的25個元素(由於這一點,我的回答的第一部分實際上是不對)。 爲了解決這個問題,您需要在聲明vec時刪除(25),或者通過相應的向量訪問來替換push_back指令(請注意關閉1)。

+0

非常感謝您的幫助。 – Drew

0

爲什麼不使用std :: random_shuffle?

+0

我想避免使用std:random_shuffle – Drew