雖然不是很好,還是放上來
大家的思路都是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次隨機