- 浏览: 1684195 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (335)
- uml (11)
- java (318)
- python (11)
- socket (2)
- ant (1)
- data structures (58)
- algorithms (67)
- concurrency (16)
- multithreading (16)
- mysql (2)
- ubuntu (2)
- c语言 (1)
- lucene (0)
- elasticsearch (0)
- django (1)
- 读书 观点 (2)
- 读书 (4)
- 观点 (4)
- collections (8)
- nio (1)
- io (2)
- 系统集成 (1)
- activemq (2)
- restful (0)
- web service (0)
- HttpClient (1)
- serializable (0)
- annotation (1)
- jdbc (3)
- classloader (0)
- regular expression (1)
- jpa (4)
- jvm (0)
- reflection (1)
- commons-pool2 (2)
- javamail (1)
- velocity (1)
- mathematics (3)
- graph (13)
- LeetCode (159)
- scala (0)
- spring (24)
- maven (5)
- spring batch (1)
- quartz (2)
- IOC (2)
- ORM (3)
- hibernate (2)
- aop (4)
- redis (0)
- zookeeper (0)
- spring mvc (4)
- ELK (1)
- string (1)
- gradle (1)
- mybatis (5)
- docker (0)
- servlet (0)
- log4j2 (1)
- html (0)
- css (0)
最新评论
-
nucleus:
貌似是因为图片的路径是http的缘故:http://dl2.i ...
spring container 实现分析:BeanWrapper -
nucleus:
nucleus 写道BeanWrapper这一块相关的类结构如 ...
spring container 实现分析:BeanWrapper -
nucleus:
BeanWrapper这一块相关的类结构如下图:文中提到的上述 ...
spring container 实现分析:BeanWrapper -
leshy:
inventory.sort(Comparator.compa ...
java8 lambda表达式学习总结 -
Leisurez:
di1984HIT 写道xuexile~hahaha~
activemq的几种基本通信方式总结
在一次编程的过程中偶然碰到一个小问题,就是需要生成一个4位数的随机数,如果是一个不到4位大的数字,前面可以加0来显示。因为要求最后是一个4位的整数,不带小数点。当时就想到了几个办法:
一、 用Math.random()
当时就这么想到,Math.random()方法不正好可以生成[0, 1)之间的数字么?如果用这个数字乘以10000不就是一个从[0, 1000)之间的数字了么? 于是当时就想到了这么一段代码:
for(int i = 0; i < 10; i++) { double number = Math.random(); System.out.println(number * 10000); }
为了看看显示结果的情况,用了一个循环。
结果显示的运行结果如下:
372.4564939910557 3645.150576934125 6102.8559042871575 9953.00445315209 2063.1098637100063 6217.048150847877 5069.372886881975 8076.738641253838 1288.394893502075 14.324909511606032
很明显,在最初的设想中,有几个地方是没有考虑到的。
1. Math.random()生成的随机数不一定只有小数点后4位的。所以后面还是可能有多位,所以显示出来的结果有多个小树点。有人可能会想,如果我再把结果中的小数部分去掉呢?这并没有解决问题,其实也就是第二个问题。
2. 因为生成的数字可能足够小,哪怕乘了10000后还是个2位数字或者3位数字。这样的话,如果要凑成一个整4位的,还需要手工在前面补0.
那么,如果我们用这种很笨的办法来做的话,该怎么样呢?首先需要乘10000,然后将小数部分去掉,再判断生成的数字,1位的补3个0,2位的补2个0,3位的补1个0.
3. 还有一个问题就是,如果我们要将这个问题扩大到生成n位的随机数时,总不能后面去判断多少位,然后再去补0吧。而且,数字足够大的时候还可能会产生溢出的问题,int不够用了,估计还要用BigInteger。
看来,这个办法不是很好。实现起来也挺费劲。就为了实现这么点功能,还费这老鼻子劲,不值得。
二、逐位生成随机数
这个办法相对来说就会简单一点。我们如果利用生成整数的随机函数,然后一位一位的去生成的话。可能会简单一点。于是我们可以用一个这样的办法:
Random rnd = new Random(); public String getRandomNumber(int digCount) { StringBuilder sb = new StringBuilder(digCount); for(int i=0; i < digCount; i++) sb.append((char)('0' + rnd.nextInt(10))); return sb.toString(); }
我们用到了java.util.Random这个类。nextInt(n)这个方法可以返回一个从0到n的随机数。
通过这个办法,我们可以生成一个若干位的随机数,然后用一个字符串的方式来表示。当数字足够长的时候,也不用担心会溢出。
补充:
前面的生成随机数方法还存在着一个小的缺陷。在随机数生成的方法中,我们需要每次重复调用的时候生成的数字都是不一样的。这样就需要每次随机化的时候提供一个随机化的种子(seed)。比较常用的方式就是采用当前的时间。所以说一个比较完整的利用当前时间作为种子,再将需要随机化的范围指定的步骤才算是一个完整的过程。具体的代码如下:
import java.util.Random; import java.util.Date; class RandomizeNumber { public static void testDate() { Date date = new Date(); long timeMill = date.getTime(); System.out.println(timeMill); Random rand = new Random(timeMill); for(int i = 0; i < 20; i++) { System.out.println(rand.nextInt(50)); } } public static void main(String[] args) { testDate(); } }
如果我们每次运行这段代码,就会发现结果不一样,这样就可以保证足够随机化了。下面是一两次运行的结果:
frank@frank-PC:~/programcode/java$ java RandomizeNumber 1352364043027 42 16 19 24 46 45 32 36 3 44 40 20 40 13 14 40 6 46 20 1 frank@frank-PC:~/programcode/java$ java RandomizeNumber 1352364049226 44 38 16 30 9 14 5 47 41 32 17 47 32 35 10 19 42 26 28 42
发表评论
-
spring源代码分析:aop的实现
2018-10-03 23:32 751简介 在之前的文章里我们讨论过一些程序构建Pro ... -
java annotation基础
2018-06-30 16:41 895简介 之前有一篇简短的文章讨论过annotati ... -
spring源代码分析:annotation支持的实现
2018-09-03 23:31 2574简介 在之前的文章里,我们讨论了spring I ... -
spring container 实现分析:BeanFactory and ApplicationContext
2018-06-02 18:29 1483简介 在之前的文章里,我们讨论过作为spring ... -
spring aop: ProxyFactory
2018-04-30 16:45 852简介 在之前的文 ... -
日志与log4j2的配置和应用总结
2018-02-15 15:47 12339简介 通常我们在日常的应用开发中,日志起到一个非 ... -
Java servlet学习总结
2018-01-02 21:14 0简介 应用系统架构的演化(从CS到BS) ... -
spring container 实现分析:BeanWrapper
2018-02-19 18:10 2011简介 在之前的一篇文章里, 我们基于《Exper ... -
spring propertyeditor
2017-10-26 09:17 0pro spring 5 chapter 4, page ... -
spring bean life cycle
2018-02-25 13:30 939简介 在使用spring bean的过程中,有一个 ... -
spring container的设计与实现分析
2017-10-08 21:31 2798简介 在之前的一 ... -
jdbc数据访问的封装和演化
2017-09-16 17:00 2707简介 在使用传统jdbc的方式来访问数据的时候, ... -
Boyer Moore算法分析总结
2017-03-31 18:42 3567简介 在之前的文章里,对于字符串的搜索算法,我曾 ... -
mybatis学习总结:mybatis和spring, spring boot的集成
2017-03-04 18:07 2518简介 在前面的讨论里已经提到了mybatis的各种配置 ... -
mybatis学习总结:annotation与xml结合示例
2017-02-25 21:09 3715简介 在之前的文章里讨论过mybatis纯xml或者 ... -
mybatis学习总结:对象关系映射的xml配置实现
2017-02-19 23:03 4073简介 在之前的文章里已经讨论过mybatis的基本配 ... -
mybatis学习总结:annotation示例改进
2017-01-24 09:06 3449简介 在前一篇文 ... -
mybatis学习总结:基础示例
2017-01-21 23:30 909简介 mybatis是一个比较流行的ORM框架, ... -
gradle学习总结
2016-12-18 21:01 4646简介 Java的自动化构建工具比较多,从最开始的an ... -
String sort的几种方法
2016-10-16 23:07 2202简介 在之前的一 ...
相关推荐
利用随机数,hashset等实现随即生成若干位不重复的红球或蓝球的程序,供参考用,只是一些想法比较好,不足两位前面补零,hashset生成不重复的数列等
在编程领域,尤其是在Java语言中,创建一个存储若干随机整数的文本文件是常见的任务,这涉及到文件操作、随机数生成以及用户输入等基础知识。在这个课题中,我们主要关注以下几个关键知识点: 1. **文件操作**:在...
Java 中可以使用 Random 类来生成随机数,例如: ```java int i = 1 + new Random().nextInt(6); ``` 八、实践练习 本文档提供了多种实践练习题,涵盖了基本类型、变量定义、常量、运算符、控制流、数组、随机数等...
14. **Random Number Generation**(随机数生成):Java的`java.util.Random`类提供了生成随机数的功能。 15. **Factoring and Primality Testing**(因子分解/质数判定):数学问题,Java中可通过各种算法实现,如...
在本次的Java实训作业“Java随机抽号实训作业”中,我们将聚焦于Java编程语言中的随机数生成和处理,这是编程领域中一个基础且实用的知识点。Java提供了强大的API来支持随机数的生成,这对于模拟、游戏开发、数据...
Java提供了`java.util.Random`类,用于生成各种类型的随机数。在这个示例中,我们需要生成一个随机数来决定每个红包的金额。 2. **数据结构与算法**:为了确保红包金额的合理分配,可能需要用到队列、栈或链表等...
Java的`Random`类提供了基本的随机数生成,而Apache Commons Math库则提供了更高级的随机数生成器和分布。 10. **复数运算**:复数在物理、工程等领域中有广泛应用。Java的`Complex`类支持复数的运算和函数。 11. ...
在这个问题中,我们可以使用 Random 类生成随机数,然后使用 HashSet 保证随机数不重复。最后,我们可以使用 Scanner 类从键盘输入用户的选择,然后对比随机数和用户选择,最后输出结果。 五、集合笛卡尔乘积 设计...
这可能涉及到对数组或集合的操作,以及随机数生成器。 4. 状态检查:当用户尝试重新组合拼图时,需要实时检查当前状态是否正确。这可以通过比较当前布局与原始图像进行,可能需要使用位图操作或自定义的比较算法。 ...
1. 随机数生成:Java的`java.util.Random`类提供了随机数生成的功能。我们可以设定每个等级干员出现的概率,然后通过生成0-1之间的随机数,与每个等级的概率比较,决定抽到哪个等级的干员。 2. 类与对象:创建一个...
6. **随机数生成**:在初始化游戏时,需要随机排列卡片的位置,这可能使用了Java的`Random`类来生成随机数。 7. **音频处理**:`audio`目录可能包含了游戏的声音文件,Java的`javax.sound`包提供了播放音频的功能,...
- 使用Java的随机数生成器(如java.util.Random)创建随机序列。 - 应用这些随机数到数据结构中,执行随机抽取或分配。 - 将结果呈现给用户,可能包括在控制台输出或者生成新的报告文件。 在压缩包中,"随机数据...
在概要设计阶段,开发者利用JAVA的util包中的Random类来生成随机数,为游戏的不确定性提供支持。GUI界面则构建于javax.swing包的基础之上,主要使用JFrame类作为窗口容器,并通过实现ActionListener接口的...
这需要随机数生成器,Java的`java.util.Random`类可以实现这一功能。 3. 数据结构:开发者可能使用数组或列表来存储拼图块的信息,包括它们的位置、旋转状态等。 4. 用户交互:Java的图形用户界面(GUI)组件,如...
4. 随机数的生成:通过`java.util.Random`类生成随机数,此处用于生成0-99之间的随机整数填充单元格。 接下来是上述内容的详细解释: Apache POI库允许Java开发者读取、修改和创建Excel文件。Java I/O操作是处理...
`java.util`提供了集合框架、日期时间处理、随机数生成等功能;`java.io`则用于输入/输出操作。 2. **类(Class)**:Java API中的类是面向对象编程的核心。例如,`ArrayList`和`HashMap`分别代表动态数组和哈希表...
`java.util`包提供了各种实用工具类,如集合(Collection)框架、日期时间处理、随机数生成等。`java.io`包则用于处理输入输出操作,包括文件读写、流操作等。此外,`java.net`包用于网络编程,`java.sql`包提供了与...
这可能通过随机交换拼图块的位置来实现,需要运用到随机数生成和数组操作。 3. **移动与旋转**:玩家可以拖动或点击拼图块进行移动,也可以选择旋转。这需要实现事件监听器,对用户的鼠标输入做出响应,并更新拼图块...
- **随机化**:利用随机数生成器打乱图片块的顺序。 - **拖放功能**:实现图片块的鼠标事件监听,允许玩家通过拖放操作来移动拼图块。 - **正确位置检测**:检查拼图块是否可以与相邻块交换位置,确保游戏逻辑的...