JAVA如何在生成随机数中不包含某个数字? 例如:Random random=new Random

JAVA如何在生成随机数中不包含某个数字? 例如:Random random=new Random();array[i]=random.nextInt(50);生成随机数中要求不包含16.25.33等多个数字?谢谢!

自己设置一个方法(或者包装系统的Random类,这个更难,不过更专业),下面给你代码:
public int getRandomExcept(int RandMax,int[] ExceptNums){
Random rand=new Random();
int num=rand.nextInt(RandMax);
while(true){
int have=0;
for(int i=0;i<ExceptNums.length;i++){
if(num==ExceptNums[i]){
have=1;
}
}
if(have==0){
return num;
}
num=rand.nextInt(RandMax);
}
}
亲测可用追问

我好好学一下你的方法,谢谢你,还有就是怎么实现生成随机数中没有重复的数字呢?可别又是用for循环遍历吧?

追答

这个也简单,你只要在这个方法的基础上,让每次传进去的ExceptNums都增加你生成的数字,不就好了。要去掉for循环的话,可以换一个数据结构。不用数组,用集合,Set。代码如下:
public int getRandomExcept(int RandMax,Set ExceptNums){
Random rand=new Random();

while(true){
int num=rand.nextInt(RandMax);
if(ExceptNums.contains(num)){
continue;
} else{
return num;
}
}
}
public int getRandomNorepit(int RandMax,Set RepitNums){
int num=this.getRandomExcept(RandMax, RepitNums);
RepitNums.add(num);
return num;
}

追问

我学JAVA刚刚一个月,现在也就会编一些基本的单线程小程序,还经常遇到问题,如果能达到编程得心应手,想实现什么功能就编的出什么程序就好了,哈哈,,谢谢你!

追答

多下功夫就行。加油互勉

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-01
将每次生成的随机数和不包含的数字进行比较,相等就删除.追问

我写过用for循环遍历数组查看是否有相等的数值,我想知道有没有固定的语句或方法可以实现这个功能呢?

第2个回答  2014-04-01
多种解决方法,我用的是正则
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRandom {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Random random=new Random();
Integer[] array=new Integer[20];
for(int i=0;i<20;i++){
array[i]=random.nextInt(50);
Pattern numP=Pattern.compile("(16|25|33)");
Matcher numM=numP.matcher(array[i].toString());
if(numM.find()){
System.out.println("find :"+numM.group());
}else{
System.out.println("not find :"+array[i]);
}
}
}

}追问

我希望的是每次不包含的随机数是用户自定义的,不是固定的几个数,这种情况正则应该满足不了,不过还是谢谢你!

我希望的是每次不包含的随机数是用户自定义的,不是固定的几个数,这种情况正则应该满足不了,不过还是谢谢你!

第3个回答  2014-04-01
赋值到数组之前判断一下不就好了么
用for循环往数组里一个个加追问

那在数值较多时效率应该不高吧!JAVA中有没有固定的方法可以实现这个功能呢?

追答

你产生随机数也是一个一个产生的 要想判断 无非在生成一个随机数后 判断 赋值 或者 生成所有随机数赋给数组后 判断数组里是否有重复的数 再重新随机生成 再判断 再赋值
固定的方法random这个类里没有 你去api里找找吧

追问

哦,,那好吧。

第4个回答  2014-04-01
检查一下,如果不合适就再来一个。追问

嗯…检查什么(⊙o⊙)?

追答

if(xx == 16 || xx == 25 || xx==33) {
重新取一个

}

追问

我想让不包含的数字是不固定的,是每次都可以由用户自定义的数字,不过还是谢谢你(^_^)

相似回答