朋友问我一个问题:“随机出来1~100中的10个数字,不能有任何重复的数字出现,但是要求不能每次对随机出的数进行验证”,要是没有最后一个要求那就很简单了,不能对每次随机的数字进行验证,这就是说要一次随机出来的数字就是唯一的,这也就是说下一次随机的数组中就不能有已经输出的数字了,呵呵,想到一个办法,
1、把你最终的结果预先放在一个数组中;
2、random产生一个随机下标,我们取出对应的数组中的值;
3、然后用数组最后一个值替换下标数组中的值;
4、将产生随机下标的范围逐个减少1;
public class MyRandom1{
private static Random random=new Random();
public static void main(String[ ] args ){
int NUM=100;
int cont[ ]=new int[NUM];
for (int i=1;i<NUM;i++){
cont[i]=1;
}
for(int j=0;j<NUM;j++){
int index=random.nextInt(100);
System.out.println("The random number is :"+cont[index]);
cont[index]=cont[NUM-1-j];
}
}
};
这个不是很好的算法就解决了这个问题,由于数字很少,使用一个简单的数组就能解决问题了,随之而来,我找个了一个很好的题目:
某单位要设计一个考核,题库里总共有100道题目,其中30道选择题,30道填空题,20道问答题,20道论叙题;每次出题采用的是考生自己选择考核时间然后电脑随机出题,每次出20道选择题,20道填空题,10道问答题,10道论叙题,每张试卷出题不能有重复,确定考核开始,开始时间倒记时,考核时间可以由考核人员确定,距离结束时间5分钟出现对话框时提示考生,还有30秒时出现声音提示,时间到了准时自动交卷;
这个到记时以及出现对话框的设计都很简单,重点他也有个要求,就是和上面的要求一样,不要验证,并且不能模仿上面的算法,晕,存心刁难...........