产生10个不同的随机数到数组里

kolnick 2011-10-12 02:19:51
产生10个不同的随机数到数组里
...全文
932 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
han1989zhang 2011-12-02
  • 打赏
  • 举报
回复
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class Test {

public static Set createRandom(int b){
Random a1 = new Random();
Set set = new HashSet();
while(set.size() < b){
set.add(a1.nextInt(50));
}
return set;
}

public static void main(String[] args) {
Set set = createRandom(10);
Iterator i = set.iterator();
System.out.println(set.size());
while(i.hasNext()){
System.out.println(i.next());
}
}
}
打油的程序员 2011-10-12
  • 打赏
  • 举报
回复



//如果不使用集合,请仿照下面的写法
public class ProduceRandom {
public static void main(String[] args) {
Integer[] intArray = getRandomArray(100, 200, 10);
for (Integer i : intArray) {
System.out.print(i + " ");
}
}

/**
* @param MIN:下界
* @param MAX:上界
* @param SUM:总个数
* @return:不同整数的整型数组
*/
public static Integer[] getRandomArray(final int MIN, final int MAX,
final int SUM) {
Integer[] intArray = new Integer[SUM];
for (int counter = 0; counter < 10; counter++) { // 记录已经产生的随机数个数
Integer temp = (int) (Math.random() * (MAX - MIN)) + MIN;// 假设只产生整数,不产生浮点数等其他类型的数
int index = temp % SUM;// 因为没有使用集合,为了提高匹配效率,仿真哈希算法,简单的产生下标
while (intArray[index] != null) {
if (intArray[index] == temp)
break;// 值相同时也复制到那个堆内存,相当于什么都没做
index = (index + 1) % SUM;
}
intArray[index] = temp;
}
return intArray;
}
}


打油的程序员 2011-10-12
  • 打赏
  • 举报
回复
如果不使用集合,为了提高效率,可以仿照下面的写法


import java.util.Arrays;
public class ProduceRandom {
public static int MIN = 100;
public static int MAX = 200;//不包含MAX
public static int SUM = 10;//总共10个随机数
public static void main(String[] args) throws InterruptedException {
Integer[] intArray = new Integer[SUM];
for (int counter = 0; counter < 10; counter++) { //记录已经产生的随机数个数
Integer temp = (int) (Math.random() * (MAX - MIN)) + MIN;//假设只产生整数,不产生浮点数等其他类型的数
int index = temp % SUM;//因为没有使用集合,为了提高匹配效率,仿真哈希算法,简单的产生下标
while (intArray[index] != null) {
if (intArray[index] == temp)
break;//值相同时也复制到那个堆内存,相当于什么都没做
index = (index + 1) % SUM;
}
intArray[index] = temp;
}
System.out.println(Arrays.toString(intArray));
}
}


kolnick 2011-10-12
  • 打赏
  • 举报
回复
我想把结果保存到一个整形数组当中要怎么操作呢!
chenchenyangll 2011-10-12
  • 打赏
  • 举报
回复
3L阿宝 LinkedList 方式求不同的随机数 是我在本版见过的此问题最优美的解法
kolnick 2011-10-12
  • 打赏
  • 举报
回复
不能使用集合
lliiqiang 2011-10-12
  • 打赏
  • 举报
回复
每取一个判断是否已有,如果已有重新取
qqzy168 2011-10-12
  • 打赏
  • 举报
回复
上面有问题,不能保证产生10个
现在如下:

import java.util.ArrayList;
import java.util.List;

public class RandomTest
{

/**产生1到10的10个不同的随机数到数组里
* @param args
*/
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();

while(true)
{
int num=(int)(Math.random() * 10);
//如果有重复就跳过本次
boolean isHave=false;
for (int j = 0; j < list.size(); j++)
{
if (num == list.get(j))
{
isHave=true;
break;
}
}
if(!isHave)
{
list.add(num);
}
//数组正好还有10个不同数字时,跳出循环
if(list.size()==10)
{
break;
}
}
System.out.println(list.size()+" "+list);
}


}
qqzy168 2011-10-12
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;

public class RandomTest
{

/**产生1到10的10个不同的随机数到数组里
* @param args
*/
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
{
int num = (int)(Math.random() * 10);
//如果有重复就跳过本次
boolean isHave=false;
for (int j = 0; j < list.size(); j++)
{
if (num == list.get(j))
{
isHave=true;
break;
}
}
if(!isHave)
{
list.add(num);
}
}
System.out.println(list);
}
}
ETCentury 2011-10-12
  • 打赏
  • 举报
回复
但阿宝大哥第二个有个手误。int括号加错了。
ETCentury 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 k3108001263 的回复:]
Java code



public class ProduceRandom {
public static int MIN = 100;
public static int MAX = 200;//不包含MAX
public static void main(String[] args) throws InterruptedException { ……
[/Quote]

和我的想法很是相似。

对于二楼的阿宝大哥的想法,很是感兴趣
打油的程序员 2011-10-12
  • 打赏
  • 举报
回复

public class ProduceRandom {
public static int MIN = 100;
public static int MAX = 200;//不包含MAX
public static void main(String[] args) {
Set<Integer> integers = new HashSet<Integer>();
while (integers.size() < 10)
integers.add((int)(Math.random()*(MAX-MIN))+MIN);//假设只产生整数,不产生浮点数等其他类型的数
Object[] intArray = integers.toArray();
System.out.println(Arrays.toString(intArray) );
}
}

打油的程序员 2011-10-12
  • 打赏
  • 举报
回复



public class ProduceRandom {
public static int MIN = 100;
public static int MAX = 200;//不包含MAX
public static void main(String[] args) throws InterruptedException {
Set<Integer> integers = new HashSet<Integer>();
Random random = new Random(47);
while (integers.size() < 10)
integers.add(random.nextInt(MAX-MIN)+MIN);//假设只产生整数,不产生浮点数等其他类型的数
Object[] intArray = integers.toArray();
System.out.println(Arrays.toString(intArray) );
}
}



qybao 2011-10-12
  • 打赏
  • 举报
回复
//一般做法
int[] ran = new int[10];
int seed = 10;
ran[0] = (int)(Math.random()*seed); //任意获得一个随即数
for (int i=1; i<ran.length; i++) {
ran[i] = ran[i-1] + ((int)(Math.random()*seed + 1)); //按升序追加随即数可保证不重复
}
for (int i=0; i<ran.length; i++) { //如果不希望按升序出现,就打乱位置
int idx = (int)(Math.random()*ran.length);
int tmp = ran[idx];
ran[idx] = ran[ran.length-idx-1];
ran[ran.length-idx-1] = tmp;
}
System.out.println(Arrays.toString(ran));

//特殊情况做法
//如果你的10个数从某个范围中获取
int max = 100; //范围
List<Integer> list = new LinkedList<Integer>();
for (int i=0; i<max; i++) {
list.add(i);
}
int[] ran = new int[10];
for (int i=0; i<ran.length; i++) {
ran[i] = list.remove(((int)Math.random()*list.size()));
}
System.out.println(Arrays.toString(ran));
瑞恩_张 2011-10-12
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
int num = (int) (Math.random()*100);
list.add(num);
}
System.out.println(list);
}
打油的程序员 2011-10-12
  • 打赏
  • 举报
回复
10个数 有无范围限制

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧