java生成不同的随机数

milo-higgs 2008-05-16 08:59:31

我现在有这样的需求:在0-6中随机生成三个数,在每次生成的三个数中,不能有重复的。
例如
可以生成这样的:1,2,3
但是不能生成这样的:1,2,2

请问这个怎么实现?
...全文
1672 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
asswecan 2012-04-04
  • 打赏
  • 举报
回复
7楼?
mayuxi1988 2011-05-31
  • 打赏
  • 举报
回复
7 楼
huhaihong 2008-05-25
  • 打赏
  • 举报
回复
生成随机数时,顺便进行判断,应该得得通吧
ThirdDimension 2008-05-24
  • 打赏
  • 举报
回复
我有个想法,不只是否可行,将所有随机数分别做为hashtable的key ,value。这样的话只要内存够大,10000个数都不成问题。
psyl 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bt_lose 的回复:]
Java codepackagecom.test;importjava.util.*;publicclassTest {publicTest() {
Random rd=newRandom();
HashSet set=newHashSet();while(true){inti=rd.nextInt(7);
set.add(newInteger(i));if(set.size()==3){break;
}
}
System.out.println("=====================================");
Iterator iter=set.iterator();while(iter.hasNext()) {

[/Quote]


这个不错
Shine_Panda 2008-05-16
  • 打赏
  • 举报
回复

做了一个 ,通过了测试. 应该可用.

import java.util.*;
public class Test{
public static void main(String[] args){
//生成 [0-n) 个不重复的随机数
//list 用来保存这些随机数
ArrayList list = new ArrayList();


int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];

int num =0;

for (int i = 0; i<n; i++){


do{
//如果产生的数相同继续循环
num = rand.nextInt(n);

}while(bool[num]);

bool[num] =true;

list.add(num);


}


System.out.println (list);


}
}
gongyali2005 2008-05-16
  • 打赏
  • 举报
回复
把生成的对像放到SET里.
milo-higgs 2008-05-16
  • 打赏
  • 举报
回复

恩,谢谢各位。

这样来说吧:
Random random = new Random();
random.nextInt(6);

我这样进行三次,得到三个在0-6之间的随机数,但是这样简单的进行三次是会导致这三个随机数之间又重复的情况,我怎么样经过过简单的处理就能是他们不重复,而且我不需要保存前一个随机数,也就是说,java在api层面上有没有提供这样的功能?
ahua3515 2008-05-16
  • 打赏
  • 举报
回复
先将0-6放到一个数组里。然后先随机取0-6中一个数i,然后用arr[i]取出该数。然后将最后的那位然后将arr[6]取出,放到arr[i]中,然后取0-5中的一个数i,依次类推。想随机取几个数都可以
bt_lose 2008-05-16
  • 打赏
  • 举报
回复

package com.test;
import java.util.*;
public class Test {
public Test() {
Random rd = new Random();
HashSet set = new HashSet();
while(true){
int i= rd.nextInt(7);
set.add(new Integer(i));
if(set.size()==3){
break;
}
}
System.out.println("=====================================");
Iterator iter = set.iterator();
while (iter.hasNext()) {
Integer item = (Integer) iter.next();
System.out.println(item);
}
System.out.println("=====================================");
}
public static void main(String[] args) {
//生成100次。都不重复
for (int i = 0; i < 100; i++) {
new Test();
}
}
}
TomyGuan 2008-05-16
  • 打赏
  • 举报
回复
網上好多的,隨便查一下就很多出來了。
TomyGuan 2008-05-16
  • 打赏
  • 举报
回复
import java.util.*;
public class Test
{

public static void main(String[] args)
{
Set <Integer> mySet = new LinkedHashSet <Integer> ();
while(mySet.size() <7)
{
mySet.add((int)(Math.random()*40+1));
}
for(Integer i:mySet)
{
System.out.print(i+" ");
}
}
}
jayflee 2008-05-16
  • 打赏
  • 举报
回复
bug多多 见谅 呵呵。

boolean isDup(int []random,int ran){
for (int i = 0; i < random.length; i++) {
if(random[i]==ran) return true;
}
return false;
}
public int[] random(int start,int end,int len){
int [] rst=new int[len];
Arrays.fill(rst,start-1);
Random r=new Random();
for (int i = 0; i < rst.length; ) {
int ran=r.nextInt(end-start+1)+start;

if(!isDup(rst, ran)){
rst[i++]=ran;
}

}
return rst;
}



调用

random(0,6,3);
刘彬彬 2008-05-16
  • 打赏
  • 举报
回复
楼主偶为你写了个:(实现了你想要的功能)
import java.util.Random;

public class TestRandom {
public static void main(String[] args) {
Random random = new Random();//创建Random类型的对象
//用for循环生成6个数
for (int i = 1; i <= 6; i++) {
int k = random.nextInt();
int j = Math.abs(k % 7);//获得0-6之间的随机数
System.out.println(j);
}
}
}
milo-higgs 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Sur_Qbing 的回复:]
用随机数那个方法 生成一组数

然后再对这一组数进行处理,这样不就可以了...

具体代码就不用写了吧..
[/Quote]

你说的这个方法很笼统啊,不过我可以理解,你的这种方法应该是先得到随机数,在比较随机数是吧?
我觉得这种方法不太好。

使用随机数的方法生成的随机数是由一定几率相同的,我就是我这次生成的三个数是不一样的。
Sur_Qbing 2008-05-16
  • 打赏
  • 举报
回复
用随机数那个方法 生成一组数

然后再对这一组数进行处理,这样不就可以了...

具体代码就不用写了吧..

62,612

社区成员

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

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