`

java 慎用 new Random()

阅读更多
package tt;

import java.util.*;
/**
* 首先看一下这个程序的工作原理:

通过这句命令首先得到的六个数是:

8 5 12 12 15 0

然后,通过new Random(-147909649).nextInt(27)得到的6个数是:

23 15 18 12 4 0

这样一来,根据:sb.append((char) (‘`’+n)); 得到:

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

整个程序的执行就是这样。

关于这个程序的运行原理的解释,最置顶的一个回复如下:

“如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-229985452和-147909649),
那么该实例就会以这个随机数种子作为随机算法产生随机数的基础。
* @author aircoder
*
*/
public class HelloWorld{

    public static String randomString(int i)
    {
        Random ran = new Random(i);
        StringBuilder sb = new StringBuilder();
        for (int n = 0; ; n++)
        {
            int k = ran.nextInt(27);
            if (k == 0)
                break;

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

        return sb.toString();
    }

    public static void main(String[] args){
        System.out.println(randomString(-229985452)+" "+randomString(-147909649)+"\t"+randomString(1));
 
    //   结果永远是  hello world xasxhmejajppj
        /**
         * 如果java.util.Random是被一个具体的数字做为“随机数种子”而实例化(在本例中是-229985452和-147909649),那么该实例就会以这个随机数种子作为随机算法产生随机数的基础。

使用同样的种子实例化的Random对象,每次运行时将会遵循同一种模式,产生同样的序列。”
这就是为什么每次运行该程序都会产生同样的结果的原理啦~
  Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是用UnCheck((Int)DateTime.Now.Ticks)做为参数种子,因此如果计算机运行速度很快,如果触发Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,
  在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。
         */
   
    }

}
分享到:
评论

相关推荐

    java中慎用继承 以及java中的stack的败笔

    Java编程语言自1995年发布以来,已经成为全球开发者广泛使用的编程工具,其设计理念和特性不断进化和完善。然而,如同任何技术一样,Java在设计过程中也存在一些争议和值得探讨的问题,其中之一便是继承的使用。本文...

    java大作业-聊天室,有待完善,慎用

    JavaFX是Java平台上的一个强大的用户界面工具包,用于创建...但是,由于标题中提到“有待完善,慎用”,说明这个项目可能还在开发阶段,可能存在一些未解决的问题,因此在使用时需要谨慎,可能需要进一步完善和调试。

    加密的惨剧!慎用文件夹加密软件!

    加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!

    暴力删除一切顽固文件,慎用!

    把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。

    请慎用java的File#renameTo(File)方法

    java的file rename方法 以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名、移动文件的目的。不过后来经常发现问题:File#renameTo(File)方法会返回失败(false),文件没有移动,...

    易语言处理事件命令慎用时钟版

    易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版

    Java Native Interface简介

    - **慎用`GetStringCritical`**:由于它可能导致GC暂停,因此只应在没有内存分配和阻塞操作的短时间段内使用。 在上述示例中,由于`fprintf`可能触发I/O操作,这会阻塞系统,因此在使用`GetStringCritical`后调用它...

    慎用动态编译

    标题“慎用动态编译”指的是在编程过程中对动态编译这一技术的谨慎态度。动态编译是程序运行时根据需要将源代码编译为可执行代码的过程,与静态编译(编译时一次性完成)形成对比。在Java中,JIT(Just-In-Time)...

    SQL_MSDE清理小程序(慎用)

    SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),

    慎用六大软件伤硬盘最终版.pdf

    慎用六大软件伤硬盘最终版.pdf

    Java有陷阱,用时需谨慎-慎用入参做返回值.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    [] - 2023-04-18 Java 陷阱:慎用入参做返回值!!!.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...

    玩客云 灯光控制 容易烧主板 慎用

    玩客云 灯光控制 容易烧主板 慎用

    慎用ext.zip

    标题“慎用ext.zip”可能指的是在编程或系统管理中,对使用特定扩展名如“ext.zip”可能带来的潜在问题的警示。虽然描述部分没有提供具体信息,但我们可以基于这个标题来探讨一下在处理zip文件,特别是那些带有“ext...

    慎用抗生素 刻不容缓 (小品).docx

    慎用抗生素 刻不容缓 (小品).docx

    初中语文文摘生活慎用何首乌治白发

    初中语文文摘生活慎用何首乌治白发

    java代码优化编程

    11. 慎用异常:异常处理应仅用于错误处理,而不是控制程序流程。异常的创建和处理会影响性能。 12. 循环中的异常处理:避免在循环内部使用`try-catch`,将其移至循环外部,以减少异常处理的开销。 13. 设置`...

    易语言处理事件命令慎用线程版源码

    易语言处理事件命令慎用线程版源码。@易语言源码分享站。

    易语言处理事件命令慎用时钟版源码.7z

    《易语言处理事件命令慎用时钟版源码解析》 易语言,作为一款由中国程序员设计的编程语言,以其简洁的语法和贴近自然语言的特点,为初学者提供了友好的编程环境。然而,对于任何编程语言而言,理解并合理使用各种...

Global site tag (gtag.js) - Google Analytics