黑马程序员技术交流社区
标题:
怎么都到不重复的20个1到1000之间的随机数?
[打印本页]
作者:
蒲公英在飞
时间:
2014-7-22 07:25
标题:
怎么都到不重复的20个1到1000之间的随机数?
怎么都到不重复的20个1到1000之间的随机数?
作者:
草鱼狂飙
时间:
2014-7-22 07:39
import java.util.Random;
public class help1 {
public static void main(String[] args) {
Random r=new Random(System.currentTimeMillis());
int x=0;
for (int i = 0; i < 300; i++) {
x=r.nextInt(1000);
System.out.println(x);
}
}
}
复制代码
作者:
Caincxy
时间:
2014-7-22 09:27
用list或collect应该可以
作者:
star5603
时间:
2014-7-22 09:47
Caincxy 发表于 2014-7-22 09:27
用list或collect应该可以
不重复不应该是Set么
作者:
idency
时间:
2014-7-22 10:09
本帖最后由 idency 于 2014-7-22 10:20 编辑
package tset;
/*
* 思路:
* 1.创建一个HashSet集合用于存放不重复的随机数
* 2.创建随机数生成器生成1-1000之间的随机数
* 3.判断HashSet集合的大小,如果小于20则不断生成随机数并添加到集合中
* 4.如果HashSet集合的大小等于20,则跳出随机数生成的循环
* 5.打印最终得到的HashSet集合
*/
import java.util.HashSet;
import java.util.Random;
public class Demo {
public static void main(String[] args) {
// 创建一个set集合用来接收要存储的数据
HashSet<Integer> hs = new HashSet<Integer>();
// 创建一个随机数生成器
Random r = new Random();
// 循环生成随机数
while (true) {
// 判断当HashSet集合的大小为20时,结束生成随机数的循环
if (hs.size() == 20) {
break;
}
// 如果HashSet集合的大小不等于20,产生一个随机数并添加到HashSet集合中
int j = r.nextInt(1000) + 1;
hs.add(j);
}
// 打印最终的HashSet集合
System.out.println(hs);
}
}
复制代码
作者:
晓风
时间:
2014-7-22 11:21
package ArrayTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
/**
* 该类中写了2个不同的实现方式,并提供了一个遍历生成结果的方式
* 方式1:通过List集合来接收产生的随机数,再调用contains()方法判断,是否有元素与产生的随机数相等,不等直接添加;
* 方式2:通过Set集合来接收产生的随机数,直接向Set集合中添加随机数。
* 遍历方式:用数组接收集合中的值,再通过sort()方法对数组排序后,再遍历输出,查看是否有重复值。
*/
public class RandomNum {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 方式1
*/
//定义一个Integer类型的List泛型集合nums
List<Integer> nums = new ArrayList<Integer>();
//声明一个随机数对象
Random ran = new Random();
//通过循环向泛型集合nums中添加元素
while (true) {
//如果集合nums中的元素个数等于20时,则推出循环,停止添加元素
if (nums.size() == 20) {
break;
}
//生成一个1~1000的随机数,泳衣个变量num接收
int num = ran.nextInt(1000) + 1;
//判断在泛型集合nums中是否存在与num值相等的元素,没有则添加。
if (!nums.contains(num)) {
nums.add(num);
//System.out.println(num + " ");//打印出元素的值
}
}
/*
* 方式2
*/
//定义一个Integer类型的Set泛型集合nums2。操作同上。
// Set<Integer> nums2 = new HashSet<Integer>();
// while (true) {
// if (nums2.size() > 20) {
// break;
// }
// int num = ran.nextInt(1000) + 1;
// //因为Set集合保存的是无序,但唯一的值,所以不用判断nums2中的元素是否与num值相等,直接添加到集合中。
// nums2.add(num);
// }
/*
* 遍历查看是否有重复值
*/
//以下的操作,是通过将集合nums中的值保存到数组is中,再通过sort()方法排序之后输出,可以比较直观的看出有没有重复值。
int[] is = new int[nums.size()];
for (int i = 0; i < nums.size(); i++) {
is[i] = nums.get(i);
}
//以下的操作,也是为了方便查看是否有重复值,将集合nums2中的值保存到数组is中。
// //因为Set泛型集合存储的元素是无序的,所有要用迭代器Iterator来遍历其中的元素。
// Iterator<Integer> it = nums2.iterator();
// int j = 0;
// while (it.hasNext()) {
// is[j] = it.next();
// j++;
// }
Arrays.sort(is);
for (int i = 0; i < is.length; i++) {
if (i == is.length - 1) {
System.out.print(is[i]);
break;
}
System.out.print(is[i] + ",");
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2