java中如何产生1-25之间的随机数

dyyjava 2014-09-28 11:09:59
我是Java初学者,还请大家帮忙一下啦。(我主要是不知道如何在Java中产生常见数据类型的随机数)
在一个5X5的方格中,在每个方格存放一个1-25的随机数,并且每个格子的数字不能重复。
...全文
1720 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ade子夜 2014-09-29
  • 打赏
  • 举报
回复
引用 2 楼 arkwrightzhn 的回复:
解决两个问题 一个是怎么产生随机数的问题: 两种方法,可以通过java.util.Random类,也可以通过java.lang.Math类
Random r = new Random();
int randomInt = r.nextInt();
long randomLong = r.nextLong();
double randomDouble = r.nextDouble();
float randomFloat = r.nextFloat();
int randomIntInRealm = r.nextInt(25);

double randomDoubleFromMath = Math.random();
用Random类更方便,可以获取多种类型的随机数,而Math.random()方法只返回一个0到1之间的double值,相当于Random.nextDouble()方法。 这里只列出了Random类里的一部分常用方法,其实它也有nextBoolean,nextBytes等方法。 nextInt返回所有int的可能值,有2的32次方种可能,nextLong也同理,返回long的所有可能取值。 nextFloat和nextDouble都是返回0到1之间的一个浮点数,包括0,不包括1,也就是返回0和返回0.111的概率是相同的,但是永远不返回1.0 API作者非常好,提供了nextInt(int)这个重载方法,如果不提供这个,那要想获得1到25的随机int,可就麻烦了,要先取一个0到1之间的浮点数,这时,0到1相当于1到26,则要得的数x与取到的随机数r之间的关系是1 - r = (25 - x) / 25,然后再计算再取整。。。。。。反正很麻烦。 有个nextInt(int)这个重载方法,很easy了,nextInt(int n)方法的返回值是0到n之间的随机整数,包括0,不包括25,因此,你想要1到25之间的随机数,包括1和25,就可以写成
int randomIntInRealm = r.nextInt(25) + 1;
好,这个问题说完了,下面说你的需求,需求里有一个“不能重复”,这就使这个问题从生成随机数往格子里填的问题变成了一个洗牌问题(shuffle)。如果你生成一个随机数,判断不重复填进去,重复就再生成,那越到后来,重复的可能性越大,程序效率非常低。 这种不重复的随机数实际上非常像洗牌,不重复的25个牌,变换位置,这样,你的随机数生成的就不是要往里填的数,而是一个位置。先把1到25顺序填进25个格子里,然后从第一个格开始到最后一个格子,25次循环,每次生成一个随机数,把当前位置的数与随机数位置的数字对换,这样循环下来,25个数就被打乱了。
可以参考一下!
Norris_Zhang 2014-09-29
  • 打赏
  • 举报
回复
解决两个问题 一个是怎么产生随机数的问题: 两种方法,可以通过java.util.Random类,也可以通过java.lang.Math类
Random r = new Random();
int randomInt = r.nextInt();
long randomLong = r.nextLong();
double randomDouble = r.nextDouble();
float randomFloat = r.nextFloat();
int randomIntInRealm = r.nextInt(25);

double randomDoubleFromMath = Math.random();
用Random类更方便,可以获取多种类型的随机数,而Math.random()方法只返回一个0到1之间的double值,相当于Random.nextDouble()方法。 这里只列出了Random类里的一部分常用方法,其实它也有nextBoolean,nextBytes等方法。 nextInt返回所有int的可能值,有2的32次方种可能,nextLong也同理,返回long的所有可能取值。 nextFloat和nextDouble都是返回0到1之间的一个浮点数,包括0,不包括1,也就是返回0和返回0.111的概率是相同的,但是永远不返回1.0 API作者非常好,提供了nextInt(int)这个重载方法,如果不提供这个,那要想获得1到25的随机int,可就麻烦了,要先取一个0到1之间的浮点数,这时,0到1相当于1到26,则要得的数x与取到的随机数r之间的关系是1 - r = (25 - x) / 25,然后再计算再取整。。。。。。反正很麻烦。 有个nextInt(int)这个重载方法,很easy了,nextInt(int n)方法的返回值是0到n之间的随机整数,包括0,不包括25,因此,你想要1到25之间的随机数,包括1和25,就可以写成
int randomIntInRealm = r.nextInt(25) + 1;
好,这个问题说完了,下面说你的需求,需求里有一个“不能重复”,这就使这个问题从生成随机数往格子里填的问题变成了一个洗牌问题(shuffle)。如果你生成一个随机数,判断不重复填进去,重复就再生成,那越到后来,重复的可能性越大,程序效率非常低。 这种不重复的随机数实际上非常像洗牌,不重复的25个牌,变换位置,这样,你的随机数生成的就不是要往里填的数,而是一个位置。先把1到25顺序填进25个格子里,然后从第一个格开始到最后一个格子,25次循环,每次生成一个随机数,把当前位置的数与随机数位置的数字对换,这样循环下来,25个数就被打乱了。
threenewbee 2014-09-29
  • 打赏
  • 举报
回复
http://developer.51cto.com/art/200906/128348.htm

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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