您的位置:首页 > 其它

008:Why does this code using random strings print “hello world”?

2016-08-08 19:04 417 查看
题目:为什么输出hello word?

import java.util.*;

public class stackoverFlow {

public static void main(String[] args) {
System.out.println(randomString(-229985452) + " " + randomString(-147909649));

}
public static String randomString(int i)
{
Random ran = new Random(i);
StringBuilder sb = new StringBuilder();
while (true)
{
int k = ran.nextInt(27);
if (k == 0)
break;

sb.append((char)('`' + k));
}

return sb.toString();
}

}


程序中加入下面一行代码:

System.out.println(k+" + "+ Integer.valueOf('`') +" = "+ (k+ Integer.valueOf('`'))  + " ,toChar = " + (char)('`' + k));


输出结果

8 + 96 = 104 ,toChar = h
5 + 96 = 101 ,toChar = e
12 + 96 = 108 ,toChar = l
12 + 96 = 108 ,toChar = l
15 + 96 = 111 ,toChar = o
23 + 96 = 119 ,toChar = w
15 + 96 = 111 ,toChar = o
18 + 96 = 114 ,toChar = r
12 + 96 = 108 ,toChar = l
4 + 96 = 100 ,toChar = d


发现正好是hello word

这说明两个问题:

1.随机数是如何产生的?

其实是已经产生好的随机数表,根据输入的随机数种子,确定选取的随机数的起始位置开始取出随机数。这样根据输入的随机数种子,每次参数的随机数就是固定的。在小学还是初中数学书上都有个随机数表,当需要用的时候就自己随机确定位置产生随机数。

2.整型转化成对应的 char类型

这样恰好形成hello word

这个更强大

int[] arrInt = {-2146926310, -1885533740, -274140519,
-2145247212, -1845077092, -2143584283,
-2147483454, -2138225126, -2147375969};

for(int seed : arrInt){
System.out.print(randomString(seed) + " ");
}


输出

the quick browny fox jumps over a lazy dog


本专题来源stackoverflow 标签是java的投票数比较高的问题以及回答,我只对上面的回答根据自己的理解做下总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: