函數是長這樣的:(CUS和ROW都是提前define過的int,CUS是數組大小)
void randomA(int chosenCus[])
{
srand((unsigned)time(NULL));
for (int i = 0; i < CUS; ++i)
{
chosenCus[i] = rand() % ROW;
for (int j = 0; j < i; ++j)
{
while (chosenCus[i] == chosenCus[j])
{
chosenCus[i] = rand() % ROW;
}
}
cout << chosenCus[i] << " ";
}
cout << endl;
}
求問為什麼還是會輸出重復的?
且每次重復時,都是數組的最後一個數與之前某個數重復。
多謝各位!
你的邏輯有問題,你的while循環的作用是當前的值與已經存在的值進行比較,只能保證當前值與已存在的最後的一個值不相等,不能保證與已存在的最後一個值的前面的值不相等(當數組長度大於等於3時就會出現你說描述的問題)。
舉個例子,假如你的數組長度為3,前三個分別為2,1,最後一個如果是2,則while循環,如果1,與第二個值進行比較,1相等,則while循環,此時如果循環出現2,2與1不相等,但是循環已經結束了。你描述的問題就出現了。