Generate more than one random numbers using native or built-in function
我知道生成随机数在java中有随机函数
1 2 3
| for example
int randomNumber = ( int )( Math. random() * 9999 ); |
这将从[0,9999]生成randomNumber,但它只返回给定范围内的一个数字。
但我只是想知道是否有任何内置函数或者你可以说本机函数会产生多个随机数,它也应该不相互匹配
假设从上面的例子我是否想要生成4个数字
它会像1,10,50,5544一样返回
在这里你可以看到有一个四个随机数,它不相互匹配。
-
请参阅此答案以获取可能的解决方案
-
请关注你的标签,这是一个基本的语言问题,完全与swing,java-me,java-ee或android(我删除)无关
-
当我得到Java时,他们试图只提供语言核心的基本功能。 从核心随机函数中获取N个唯一结果可以在2-3行简单代码中完成。所以没有必要将其作为单独的函数来实现。
另一种技术(除了@MichaelShrestha所示的技术之外)是将整个数字范围放在一个集合中,然后将其洗牌并以洗牌顺序取数字。
它的优点是,虽然其他方法可能会旋转许多(多个)数字以找到非重复的随机值,但这只需要运行一次。 OTOH,对于少量数字,@ Michael的技术可能会更快。
-
你能举个例子吗?
-
非常感谢安德鲁:)给你+1点好建议:)
尝试这样的事情
创建ArrayList并添加随机数,同时添加检查ArrayList是否已包含该数字。
例如:
1 2 3 4 5 6 7 8 9
| ArrayList <Integer > numbers = new ArrayList <Integer >();
while (numbers. size()<=YOUR_MAX_SIZE )
{
int randomInteger = ( int )( Math. random() * 9999 );
if (!numbers. contains(randomInteger )) {
{
numbers. add(randomInteger );
}
} |
-
雅米哈尔,我知道这种方式,我可以通过不同的方式做,但我只是想知道是否有内置的本机功能!
-
我怀疑有没有...我没有找到任何这样的方法..但如果存在这样的方法将是非常伟大的...
-
@SiddhpuraAmit - 不,没有。查看文档。
-
到目前为止唯一的其他答案+1代表"没有重复"。
-
如果将此解决方案与Set一起使用,则可以删除contains检查。
-
谢谢你的信息
-
谢谢迈克尔的建议我给我+1 :)
试试这个,如下所示:
1 2 3 4 5
| int min = 1;
int max = 10000;
Random r = new Random();
int i1 = r. nextInt(max - min + 1) + min ; |
编辑:
没有重复:
1 2 3 4 5 6 7 8 9
| Random rng = new Random(); // Ideally just create one instance globally
int min = 1;
int max = 10000;
Set <Integer > generated = new LinkedHashSet <Integer >();
while (generated. size() < numbersNeeded )
{
Integer next = r. nextInt(max - min + 1) + min ;
generated. add(next );
} |
链接
-
是的,我纠正了它,感谢否定投票......
-
不,我感谢你告诉我,我错过了那一部分:-)这次投票让我感到厌烦:-D
-
谢谢G00dy的建议我给我+1 :)
-
欢迎,希望它有帮助:)
由于HashSet包含唯一对象...您可以拥有唯一的随机数。
1 2 3 4 5 6
| Set uniqueRandomNumber = new HashSet();
int i = 5 //number Of Random Number Required;
for(int = 0; i <5; 1++){
int randomNumber = ( int )( Math. random() * 9999 );
uniqueRandomNumber. add(randomNumber );
} |
1 2 3 4 5 6 7 8
| ArrayList <Integer > rnumbers = new ArrayList <Integer >();
for (int i = 0; i < 4; i ++) {
int randomNumber = (int) (Math. random() * 9999);
while (rnumbers. contains(randomNumber )) {
randomNumber = (int) (Math. random() * 9999);
}
rnumbers. add(randomNumber );
} |
没有内置的api。但你可以使用这样的东西
1 2 3 4 5 6 7 8 9 10
| public static int[] getRandoms (int amount, int range ){
int[] result = new int[amount ];
ArrayList tempList = new ArrayList();
for(int i = 0; i < range ; i ++)
tempList. add(i );
Collections. shuffle(tempList );
for(int i = 0; i < amount ; i ++)
result [i ] = (int)tempList. get(i );
return result ;
} |
此数量是您想要的randome数量,范围是随机数的最大范围
-
呀谢谢:)通过这种方式也很有用,但没有任何内置的本机功能???
-
到目前为止我还没有找到任何东西。但如果您发现任何请与我们分享:)
-
"没有任何内置的原生功能???" '内置'在这里读起来像'懒惰的屁股'。把它放在一个方法中,你有'内置'功能。还要注意,虽然一个'?'表示问题,2或更多通常表示bozo。
-
谢谢Stine的建议我给+1 :)
-
好的抱歉亲爱的安德鲁感谢您的好建议我必须记住这个技术术语:)