雖然不是很好,還是放上來
大家的思路都是for 循環,得到隨機數,不重復添加,重復繼續尋找隨機數,知道滿了為址
int[] reInt=new int[20] ...{-1,-1-,1-1.................};
for (int iCount=0;iCount<20;iCount++)
...{
bool isFind=false;
int rand=new Random().Next(1,20);
for(int yCount=0;yCount<20;yCount++)
...{
if(reInt[yCount]==rand)
...{
isFind=true;
break;
}
}
if(isFind)
iCount--;
else
reInt[iCount]=rand;
}
大部分的書估計都是這樣寫,這樣的缺點是單這個數字段如果是1000個的時候,很難判斷這兩個for循環什麼時候會結束,不是簡單的n*n哦。我的方法如下
private System.Random random = new Random();
private int iCount = 0;
private int[] retInt=new int [20]...{-1,-1.............};
public void GetRandom(int start ,int end)
...{
if (start == end)
...{
retInt[iCount++)=start;
return ;
}
int mid= random.Next(start, end);
retInt[iCount++)=mid;
//左邊隨機
if(mid!=start) GetRandom(start, mid - 1);
//右邊隨機
if (mid != end) GetRandom(mid + 1, end);
return ;
}
這樣20個數,就是20次隨機,10000個就是1w次隨機