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的投票数比较高的问题以及回答,我只对上面的回答根据自己的理解做下总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值