A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵晓海 中级黑马   /  2013-11-17 19:44  /  1802 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.Random;
  2. public class HelloWorld {
  3.         public static String randomString(int i) {
  4.                 Random ran = new Random(i);
  5.                 StringBuilder sb = new StringBuilder();
  6.                 for (int n = 0;; n++) {
  7.                         int k = ran.nextInt(27);
  8.                         if (k == 0)
  9.                                 break;
  10.                         sb.append((char) ('`' + k));
  11.                 }
  12.                 return sb.toString();
  13.         }

  14.         public static void main(String[] args) {
  15.                 System.out.println(randomString(-229985452) + " "
  16.                                 + randomString(-147909649));
  17.         }
  18. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 挺好玩的,如果有大神解决了,告诉我一下哈.

查看全部评分

9 个回复

倒序浏览
你可以在第9行后面加一行代码System.out.println(k);打印出结果是8 5 12 12 15  23 15 18 12 4 ,单独打印System.out.println('`');可以得出结果是96,将这个数加上前面得到的数成为新的数得到的强制转换为char类型分别得到  (h)104 (e)101  (l)108 (l)108  (o)111 (w)119  (o)111  (r)114  (l)108 (d)100
回复 使用道具 举报
本帖最后由 雪龙 于 2013-11-17 22:47 编辑

我又修改了,实验了一样,感觉很神奇啊
回复 使用道具 举报
终结者 发表于 2013-11-17 22:39
你可以在第9行后面加一行代码System.out.println(k);打印出结果是8 5 12 12 15  23 15 18 12 4 ,单独打印S ...

问题是这是用随机函数random随机出来的啊,为什么随机出来的是定值呢?
回复 使用道具 举报
Random ran = new Random(i); 这句话是指在i的范围内产生随机数  楼上
回复 使用道具 举报
赵晓海 发表于 2013-11-17 23:03
问题是这是用随机函数random随机出来的啊,为什么随机出来的是定值呢?

至于你说的随机函数的问题,那就只有你自己把API文档好好读读了
回复 使用道具 举报
你写这段代码的意义是什么,你想达成什么目的,逻辑比较乱。 Random ran = new Random(i);你这句代码指定了随机数的范围,还有你这么大的负数,是否已超随机数的边界。2.int k = ran.nextInt(27);既然已经指定范围,又指定27是多此一举。3.StringBuilder sb = new StringBuilder();这个用的不错,字符串的拼接这个效率最好。希望能帮到你
回复 使用道具 举报
本帖最后由 gogostudy 于 2013-11-19 20:02 编辑

来源于网络:
“如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础。

使用同样的种子实例化的Random对象,每次运行时将会遵循同一种模式,产生同样的序列。”
这就是为什么每次运行该程序都会产生同样的结果的原理啦~

还有的人就非常精辟地指出了,这是计算机所谓的“伪随机数”问题(详细见扩展阅读),更有部分Geek的回复者从计算机理论和概率论的角度说明了,应该如何找到这些神奇的“随机数种子”。能够把这么一个原意为搞笑的帖子发展到理论的高度~,相信这应该也是计算机科学家的境界和觉悟了吧!

8 + 96 = 104 --> h  
5 + 96 = 101 --> e  
12 + 96 = 108 --> l  
12 + 96 = 108 --> l  
15 + 96 = 111 --> o  
23 + 96 = 119 --> w  
15 + 96 = 111 --> o  
18 + 96 = 114 --> r  
12 + 96 = 108 --> l  
4 + 96 = 100 --> d
回复 使用道具 举报
gogostudy 发表于 2013-11-19 20:01
来源于网络:
“如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-22998545 ...

我看的就是这个文章,可是里面没说清楚!
回复 使用道具 举报
赵晓海 发表于 2013-11-19 20:13
我看的就是这个文章,可是里面没说清楚!

给定随机数因子固定后 每次都是相同的随机数序列 这种伪随机数是不变的
而为什么是这几个因子呢 这是科学家算出来的 恶搞用的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马