我要从数组中随机取一个数,当再次运行要在剩下的数中 随机取一个,请问该怎么做,怎么能把已经取了的数 从数组中去掉
解决方案 »
- struts框架中为什么地址栏输入的是http://localhost:7001/struts-app/login.do而打开了一个jsp页面??
- swt如何做出一个漂亮的界面?
- 哪位大侠知道我的问题出在哪,在线等待
- 怎样弹出一个对话框,并输入参数?
- java中如何实现类似vb中的chr()函数的功能?
- java调用dll的问题???至今没有解决!!!求救!!!
- 请问那位兄弟了解电子邮件中附件功能的解决方案?
- 还是那个简单的java.util.Vector类函数使用问题
- 网络编程之TCP问题
- 求大神解决java界面图片显示问题
- 高手帮我把java转成VB(谢谢了,急用)
- sourceforge 又上不去了,没法下载 Hibernate Annotation 3.3.0
lottery[i] = rand() % 10;
for(j = 0; j < i; j++){
if(lottery[j] == lottery[i]){
break;
}
}
if(j == i){
i++;
}
}c语言中的小算法,随机取到不同的数,并不是真正的去除已经选中的数
还有一个方法,我再找找我以前写的
num[i] = i + 1;
} for(j = N; j > N - 7; j--){
i = (int)(rand() % j);
printf("%d ", num[i]);
num[i] = num[j - 1];
}N是数组中输入的个数,随机取7个不同的数
取到一个就让最后的一个数覆盖掉已经取到的数算法是这样的,楼主可以改一下
能不能改用LINKEDLIST
采用LIST的话,相对删除部分数据教为方便
import java.util.Random;/**
* <code>RandomUtil</code> - Random Tool Class.
* @author SageZk
* @version 1.3
*/
public class RandomUtil { private RandomUtil() { /*禁止创建此类的实例*/ } private static volatile Random rnd = null; //随机数发生器 1.3 加上了 volatile /**
* 初始化随机数发生器。
*/
private static synchronized void initRnd() {
if (rnd == null) rnd = new Random(); //1.2 提高了多线程访问的安全性
} /**
* 计算并返回无重复值的以 <code>min</code> 为下限 <code>max</code> 为上限的
* 随机整数数组。其中 min ~ max 之间整数被抽中的概率相等。
* @param min 随机整数下限(包含)
* @param max 随机整数上限(包含)
* @param len 结果数组长度
* @return 结果数组
*/
public static int[] getLotteryArray(int min, int max, int len) {
//参数校验及性能优化
if (len < 0) return null; //长度小于 0 的数组不存在
if (len == 0) return new int[0]; //返回长度为 0 的数组
if (min > max) { //校正参数 min max
int t = min;
min = max;
max = t;
}
final int LEN = max - min + 1; //种子个数
if (len > LEN) return null; //如果出现 35 选 36 的情况就返回 null
//Bug#1: if (len == 1) return new int[] {min}; //即 min == max 的情况
//Bug#1: 1.1 版本修复
//计算无重复值随机数组
//1.2 提高了多线程访问的安全性和性能
if (rnd == null) initRnd(); //初始化随机数发生器
int[] seed = new int[LEN]; //种子数组
for (int i = 0, n = min; i < LEN;) seed[i++] = n++; //初始化种子数组
for (int i = 0, j = 0, t = 0; i < len; ++i) {
j = rnd.nextInt(LEN - i) + i;
t = seed[i];
seed[i] = seed[j];
seed[j] = t;
}
return Arrays.copyOf(seed, len); //注意:copyOf 需要 JRE1.6
} //Unit Testing
public static void main(String[] args) {
final int N = 10000; //测试次数
for (int i = 0; i < N; ++i) {
int[] la = RandomUtil.getLotteryArray(1, 35, 7);
if (la == null) continue;
for (int v : la) System.out.printf("%0$02d ", v);
System.out.println();
}
}}参见:http://blog.csdn.net/sagezk/archive/2008/07/16/2660982.aspx