008:Why does this code using random strings print “hello world”?
Posted 氵冫丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了008:Why does this code using random strings print “hello world”?相关的知识,希望对你有一定的参考价值。
题目:为什么输出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的投票数比较高的问题以及回答,我只对上面的回答根据自己的理解做下总结。
以上是关于008:Why does this code using random strings print “hello world”?的主要内容,如果未能解决你的问题,请参考以下文章