我是代码:
Random rand = new Random();
int[] arr = new int[4];
for (int i = 0; i < 4; i++)
{
for (int k = 0; k < 4; k++)
{
int rad = rand.Next(1, 5);
if (arr[k] != rad)
arr[i] = rad;
}
}
for (int i = 0; i < 4; i++)
MessageBox.Show(arr[i].ToString());
我想从凌晨1点到凌晨4点生产数字并且彼此不平等。 TNX。
答案 0 :(得分:2)
创建一个包含唯一元素的数组,然后对其进行随机播放,就像在下面的代码中一样,它会以一个随机的顺序对数组进行洗牌,它使用Fisher-Yates shuffle algorithm:
List<CardPurchaseDetail> cardsPurchased = cardPurchaseDetailDao.getPurchaseDetails(cardPurchase.getPurchaseNumber());
if(cardsPurchased != null && cardsPurchased.size() > 0){
int ctr = 0;
for(CardPurchaseDetail cardPurchased : cardsPurchased){
CardMaster card = cardMasterDao.getCardDetails(cardPurchased.getPk().getCardNumber());
if(ctr > 0){
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
}
table.addCell(bodyFontStyle (card.getPk().getCardNumber()));
table.addCell(bodyFontStyle (card.getStatus()));
table.addCell(bodyFontStyle (card.getAmount().toString()));
ctr++;
}
} else {
table.addCell(" ");
table.addCell(" ");
table.addCell(" ");
}
可以找到in this post的解释和模板版本的算法,但Jon Skeet的回答很好。
int N = 20;
var theArray = new int[N];
for (int i = 0; i < N; i++)
theArray[i] = i;
Shuffle(theArray);
public static void Shuffle(int[] a) {
if (a == null) throw new ArgumentNullException("Array is null");
int n = a.Length;
var theRandom = new Random();
for (int i = 0; i < n; i++) {
int r = i + theRandom.Next(n-i); // between i and n-1
int temp = a[i];
a[i] = a[r];
a[r] = temp;
}
}
答案 1 :(得分:2)
反过来考虑一下:
而不是:
生成一个数字 然后 检查它是否重复
你这样做:
你已经拥有一组非重复数字, 然后 你接受了它 一个接一个 - 删除重复的可能性。
这样的事情会:
List<int> list = Enumerable.Range(1, 4).ToList();
List<int> rndList = new List<int>();
Random rnd = new Random();
int no = 0;
for (int i = 0; i < 4; ++i) {
no = rnd.Next(0, list.Count);
rndList.Add(list[no]);
list.Remove(list[no]);
}
结果在rndList
。
这样,不会发生重复。
答案 2 :(得分:1)
创建一个包含所需数字的列表,然后将它们随机播放:
var rnd = new Random();
List<int> rndList = Enumerable.Range(1, 4).OrderBy(r => rnd.Next()).ToList();
如果你想要一个数组而不是一个列表:
var rnd = new Random();
int[] rndArray = Enumerable.Range(1, 4).OrderBy(r => rnd.Next()).ToArray();
答案 3 :(得分:-2)
<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/><text lang="en">Password not verified</text></failure>" UserInfo=0x1a4e8c00 {NSLocalizedDescription=<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/><text lang="en">Password not verified</text></failure>})