版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Random 类- android 培训、java 培训、期待与您交流! -java.util 包java.util 包是 Java 语言提供的工具类包,该包中包含了如日期、随机数和数据结构实现类等一系列的工具类实现,是学习 Java 语言的基础包之一。本部分就以 Java 语言中常用的时间和日期处理、随机数处理以及集合框架为基础进行介绍。时间和日期处理使用程序进行时间和日期处理,是程序员必须的一种常用技能,在不同的程序设计语言中提供了不同的格式进行实现,现在就介绍一下 Java 语言中的实现方式,以及基本的应用,使得对于 Java 语言的时间和日期处理技术有比较全面的认识。在程序中,某个固定
2、的时间代表的都是一个时间点,也就是一个时间的瞬间,例如 2009 年3 月 8 日 15 点 50 分 0 秒,在实际的应用中,经常需要对于两个时间进行比较或计算时间之间的差值,这些功能在 Java 语言中都可以很方便的实现。在 Java毫秒。在 Java语言中,时间的表达是毫秒。也就是说,Java 语言中的时间处理可以精确到语言中,表达时间的方式有两种:绝对时间。以直观的形式来表达某个时间点,例如 2009 年 10 月 10 号 0 点 0 分 0 秒。使用这种形式表达时间,使用起来比较直观,但是不方便进行时间之间的计算。例如无法很直观的计算 2020 年 1 月 1 号 0 点 0 分
3、0 秒和上面这个时间之间相差多少天。绝对时间以对象的形式进行表达,Java API 中提供了 java.util 包中的 Date 类和 Calendar 类的对象进行表达。:相对时间。以一个 long 型的数字表达某个时间点。例如 102847423468。使用这种方式的优缺点和绝对时间刚好相反。这种方式很方便时间之间的计算,但是阅读起来很不直观。在Java API 中以需要表达的时间点,例如 2009 年 10 月 10 号 0 点 0 分 0 秒,和 GMT(格时间,也就是伦敦时间)1970 年 1 月 1 号 0 点 0 分 0 秒之间相差的毫秒数作为相对时间的数值,如果该时间在这个时
4、间只好,则相对时间为正数,否则相对时间为负数。Java API 中提供了 java.lang 包中的System 类的 currentTimeMillis 方法,获得以相对时间形式描述的当前系统时间。在实际使用时,绝对时间和相对时间之间可以很方便的进行转换。Date 类在 JDK1.0 中,Date时间的类,但是由于 Date 类不便于实现类是唯一的一,所以从 JDK1.1 版本开始,使用 Calendar 类进行时间和日期处理。这里简单介绍一下Date 类的使用。:使用 Date 类代表当前系统时间Date d = new Date();System.out.prln(d);使用 Date
5、类的默认构造方法创建出的对象就代表当前时间,由于 Date 类覆盖了 toString技术总结Date 类、Calendar 类和方法,所以可以直接输出 Date 类型的对象,显示的结果如下:Sun Mar 08 16:35:58 CST 2009在该格式中,Sun 代表Sunday(周日),Mar 代表 March(三月),08 代表 8 号,CST 代表China Standard Time(中国标准时间,也就是:使用 Date 类代表指定的时间Date d1 = new Date(2009-1900,3-1,9);时间(东八区)。System.out.prln(d1);使用带参数的构造方
6、法,可以构造指定日期的Date 类对象,Date 类中年份的参数应该是实际需要代表的年份减去 1900,实际需要代表的月份减去 1 以后的值。例如上面的示例代码代表就是 2009 年 3象,和这个类似。:获得 Date 对象中的信息Date d2 = new Date();/年份year = d2.getYear() + 1900;/月份month = d2.getMonth() + 1;/日期date = d2.getDate();/小时hour = d2.getHours();/分钟minute = d2.getMinutes();/秒second = d2.getSeconds();/几
7、day = d2.getDay();月 9号。实际代表具体的年月日时分秒的日期对System.out.pr System.out.pr System.out.pr System.out.pr System.out.pr System.out.prSystem.out.prln(年份: + year);ln(月份: + month);ln(日期: + date);ln(小时: + hour); ln(分钟: + minute); ln(秒: + second);ln(: + day);使用 Date 类中对应的 get 方法,可以获得 Date类对象中相关的信息,需要注意的是使用getYear
8、获得是Date 对象中年份减去 1900 以后的值,所以需要显示对应的年份则需要在返回值的基础上加上 1900,月份类似。在 Date 类中还提供了 getDay 方法,用于获得 Date对象代表的时间是几,Date 类规定周日是 0,周一是 1,周二是 2,后续的依次类推。:Date 对象和相对时间之间的互转Date d3 = new Date(2009-1900,3-1,10); long time = 1290876532190L;/将 Date 类的对象转换为相对时间long t = d3.getTime();System.out.prln(t);/将相对时间转换为 Date 类的对象
9、 Date d4 = new Date(time); System.out.prln(d4);使用 Date 对象中的 getTime 方法,可以将 Date 类的对象转换为相对时间,使用 Date 类的构造方法,可以将相对时间转换为 Date 类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。Calendar 类从 JDK1.1 版本开始,在处理日期和时间时,系统使用 Calendar 类进行实现。在设计上,Calendar 类的功能要比Date 类强大很多,而且在实现方式上也比 Date 类要复杂一些,下面就介绍一下 Calendar 类的使用。Calendar 类是一个
10、抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance 方法创建即可。:使用 Calendar 类代表当前时间Calendar c = Calendar.getInstance();由于 Calendar 类是抽象类,且 Calendar 类的构造方法是 protected 的,所以无法使用Calendar 类的构造方法来创建对象,API 中提供了 getInstance 方法用来创建对象。使用该方法获得的 Calendar 对象就代表当前的系统时间,由于 Calendar 类toString 实现的没有 Date 类那么直观,所以直接
11、输出 Calendar 类的对象意义不大。:使用 Calendar 类代表指定的时间 Calendar c1 = Calendar.getInstance(); c1.set(2009, 3 - 1, 9);使用 Calendar 类代表特定的时间,需要首先创建一个 Calendar 的对象,然后再设定该对象中的年月日参数来完成。set 方法的为:public final void set(year,month,date)以上示例代码设置的时间为 2009 年 3 月 9 日,其参数的结构和 Date 类不一样。 Calendar 类中年份的数值直接书写,月份的值为实际的月份值减 1,日期的值
12、就是实际的日期值。如果只设定某个字段,例如日期的值,则可以使用如下 set 方法:public void set(field,value)在该方法中,参数 field 代表要设置的字段的类型,常见类型如下:Calendar.YEAR年份 Calendar.MONTH月份 Calendar.DATE日期Calendar.DAY_OF_MONTH日期,和上面的字段完全相同 Calendar.HOUR12 小时制的小时数 Calendar.HOUR_OF_DAY24 小时制的小时数 Calendar.MINUTE分钟Calendar.SECOND秒 Calendar.DAY_OF_K几后续的参数va
13、lue 代表,设置成的值。例如:c1.set(Calendar.DATE,10);该代码的作用是将c1 对象代表的时间期设置为 10号,其它所有的数值会被重新计算,例如几以及对应的相对时间数值等。:获得 Calendar 类中的信息Calendar c2 = Calendar.getInstance();/年份year = c2.get(Calendar.YEAR);/月份month = c2.get(Calendar.MONTH) + 1;/日期date = c2.get(Calendar.DATE);/小时hour = c2.get(Calendar.HOUR_OF_DAY);/分钟min
14、ute = c2.get(Calendar.MINUTE);/秒second = c2.get(Calendar.SECOND);/几day = c2.get(Calendar.DAY_OF_K);System.out.pr System.out.pr System.out.pr System.out.pr System.out.pr System.out.prSystem.out.prln(年份: + year);ln(月份: + month);ln(日期: + date);ln(小时: + hour); ln(分钟: + minute); ln(秒: + second);ln(: + da
15、y);使用 Calendar 类中的 get 方法可以获得 Calendar 对象中对应的信息,get 方法的下:如publicget(field)其中参数 field 代表需要获得的字段的值,字段说明和上面的 set 方法保持一致。需明的是,获得的月份为实际的月份值减 1,获得的 Calendar 类中,周日是 1,周一是 2,周二是 3,依次类推。:其它方法说明的值和 Date 类不一样。在其实 Calendar 类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。:add 方法public abstract void add(field,amount)该方法的作用是在 Ca
16、lendar 对象中的某个字段上增加或减少一定的数值,增加是 amount的值为正,减少时 amount 的值为负。例如在计算一下当前时间 100 天以后的日期,代码如下: Calendar c3 = Calendar.getInstance(); c3.add(Calendar.DATE, 100);year1 = c3.get(Calendar.YEAR);/月份month1 = c3.get(Calendar.MONTH) + 1;/日期date1 = c3.get(Calendar.DATE);System.out.prln(year1 + 年 + month1 + 月 +date1
17、+ 日);这里 add 方法是指在 c3 对象的 Calendar.DATE,也就是日期字段上增加 100,类会重新计算该日期对象中其它各字段的值,从而获得 100 天以后的日期,例如程序的输出结果可能为:2009 年 6 月 17 日:after 方法publicafter(Object when)该方法的作用是判断当前日期对象是否在 when 对象的后面,如果在 when 对象的后面则返回 true,否则返回 false。例如:Calendar c4 = Calendar.getInstance(); c4.set(2009, 10 - 1, 10);Calendar c5 = Calen
18、dar.getInstance(); c5.set(2010, 10 - 1, 10);b = c5.after(c4);System.out.prln(b);在该示例代码中对象 c4 代表的时间是 2009 年 10 月 10 号,对象 c5 代表的时间是 2010年 10 月 10 号,则对象 c5 代表的日期在 c4 代表的日期之后,所以 after 方法的返回值是 true。另外一个类似的方法是 before,该方法是判断当前日期对象是否位于另外一个日期对象之前。:getTime 方法public final Date getTime()该方法的作用是将 Calendar 类型的对象转
19、换为对应的 Date 类对象,两者代表相同的时间点。类似的方法是 setTime,该方法的作用是将Date 对象转换为对应的 Calendar 对象,该方法的如下:public final void setTime(Date date)转换的示例代码如下:Date d = new Date();Calendar c6 = Calendar.getInstance();/Calendar 类型的对象转换为Date 对象Date d1 = c6.getTime();/Date 类型的对象转换为 Calendar 对象 Calendar c7 = Calendar.getInstance(); c7
20、.setTime(d);:Calendar 对象和相对时间之间的互转 Calendar c8 = Calendar.getInstance(); long t = 1252785271098L;/将 Calendar 对象转换为相对时间long t1 = c8.getTimeillis();/将相对时间转换为 Calendar 对象Calendar c9 = Calendar.getInstance();c9.setTimeillis(t1);在转换时,使用 Calendar 类中的 getTimeillis 方法可以将 Calendar 对象转换为相对时间。在将相对时间转换为 Calenda
21、r 对象时,首先创建一个 Calendar 对象,然后再使用Calendar 类的setTime应用示例illis 方法设置时间即可。下面以两个简单的示例介绍时间和日期处理的基本使用。:计算两个日期之间相差的天数例如计算 2010 年 4 月 1 号和 2009 年 3 月 11 号之间相差的天数,则可以使用时间和日期处理进行计算。该程序实现的原理为:首先代表两个特定的时间点,这里使用 Calendar 的对象进行代表,然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以 1的毫秒数(24 小时X60 分钟 X60 秒X1000 毫秒)即可获得对应的天数。实现该示例的完整
22、代码如下:import java.util.*;/* 计算两个日期之间相差的天数*/天public class DateExle1 public sic void main(String args) /设置两个日期/日期:2009 年 3 月 11 号Calendar c1 = Calendar.getInstance(); c1.set(2009, 3 - 1, 11);/日期:2010 年 4 月 1 号Calendar c2 = Calendar.getInstance(); c2.set(2010, 4 - 1, 1);/转换为相对时间long t1 = c1.getTime long
23、 t2 = c2.getTime/计算天数illis();illis();long days = (t2 - t1)/(24 * 60 * 60 * 1000);System.out.prln(days);:输出当前月的月历该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是 2009日,则输出 2009 年 3 月的日历。年 3 月 10该程序实现的原理为:首先获得该月 1 号是几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果 1 号是一,则打印一个的空格,如果 1 号是换行。实现该示例的完整代码如下:二,则打印两个的空格,依次类推。打印完六的日期以后
24、,进行import java.util.*;/* 输出当前月的日历*/public class DateExle2public sic void main(String args)/获得当前时间Calendar c = Calendar.getInstance();/设置代表的日期为 1 号c.set(Calendar.DATE,1);/获得 1 号是几start = c.get(Calendar.DAY_OF_K);/获得当前月的最大日期数maxDay = c.getActualum(Calendar.DATE);/输出标题System.out.prln(日一二三四五六);/输出开始的空格f
25、or(i = 1;i start;i+) System.out.pr( );/输出该月中的所有日期for(i = 1;i = maxDay;i+)/输出日期数字 System.out.pr( + i);/输出分隔空格 System.out.pr( ); if(i 10)System.out.pr( );/判断是否换行if(start + i - 1) % 7 = 0) System.out.prln();/换行 System.out.prln();关于时间和日期的处理就介绍这么多,的实现方法还需要根据具体问题进行对应的实现。Random 类在实际的项目开发过程中,经常需要产生一些随机数值,例如
26、登录中的校验数字等,或者需要以一定的几率实现某种效果,例如程序中的物品掉落等。在Java API 中,在 java.util 包中专门提供了一个和随机处理有关的类,这个类就是 Random类。随机数字的生成相关的方法都包含在该类的。Random 类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的 数字称为 数(seed),在字。相同 数的 Random 对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的 Random 对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。下面介绍一下 Random 类的
27、使用,以及如何生成指定区间的随机数组以及实现程序中要求的几率。:Random 对象的生成Random 类包含两个构造方法,下面依次进行介绍:a、public Random()数的基础上进行一定的变换,从而产生需要的随机数该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为数构造 Random 对象。b、public Random(long seed)该构造方法可以通过制定一个数进行创建。示例代码:Random r = new Random();Random r1 = new Random(10);数,然后使用这个再次强调:数只是随机算法的:andom 类中的常用方法数字,和生成的随机数
28、字的区间无关。Random 类中的方法比较简单,每个方法的功能也很容易理解。需明的是,Random 类中各方法生成的随机数字都是均匀分布的,也就是说区间率是均等的。下面对这些方法做一下基本的介绍:的数字生成的几a、publicnext()值,生成 true 和 false 的值几率相等,也就是都该方法的作用是生成一个随机的是 50%的几率。b、public double nextDouble()该方法的作用是生成一个随机的 double 值,数值介于0,1.0)之间,这里中括号代表包含区间端点,小括号代表不包含区间端点,也就是 0 到 1 之间的随机小数,包含 0 而不包含1.0。c、publ
29、icnext()值,该值介于的区间,也就是-231 到 231-1 之间。该方法的作用是生成一个随机的如果需要生成指定区间的例中的代码。值,则需要进行一定的数学变换,具体可以参看下面的使用示d、publicnext(n)该方法的作用是生成一个随机的值,该值介于0,n)的区间,也就是 0 到n 之间的随机值,包含 0 而不包含 n。如果想生成指定区间的中的代码。值,也需要进行一定的数学变换,具体可以参看下面的使用示例e、public void setSeed(long seed)该方法的作用是重新设置 Random 对象中的数。设置完数以后的 Random 对象和相同数使用 new 关键字创建出
30、的 Random 对象相同。:Random 类使用示例使用 Random 类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字。以下生成随机数的代码均使用以下 Random 对象 r 进行生成:Random r = new Random(); a、成0,1.0)区间的小数 double d1 = r.nextDouble();直接使用nextDouble 方法获得。b、生成0,5.0)区间的小数double d2 = r.nextDouble() * 5;因为 nextDouble 方法生成的数字区间是0,1.0),将该区间扩大 5 倍即是要求的区间。 同理,生成0,d)
31、区间的随机小数,d 为任意正的小数,则只需要将nextDouble 方法的返回值乘以 d 即可。c、生成1,2.5)区间的小数double d3 = r.nextDouble() * 1.5 + 1;生成1,2.5)区间的随机小数,则只需要首先生成0,1.5)区间的随机数字,然后将生成的随机数区间加 1 即可。同理,生成任意非从 0 开始的小数区间d1,d2)范围的随机数字(其中 d1 不等于 0),则只需要首先生成0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上 d1 即可。d、生成任意整数n1 = r.next直接使用next();方法即可。e、生成0,10)区间的整数n2 =
32、 r.next(10);n2 = Mabs(r.next() %10);以上两行代码均可生成0,10)区间的整数。第一种实现使用 Random 类中的 next(n)方法直接实现。第二种实现中,首先调用next()方法生成一个任意的数字,该数字和 10 取余以后生成的数字区间为(-10,10),因为按照数学上的规定余数的绝对值小于除数,然后再对该区间求绝对值,则得到的区间就是0,10)了。同理,生成任意0,n)区间的随机整数,都可以使用如下代码:n2 = r.next(n);n2 = Mabs(r.next() % n);f、生成0,10区间的整数n3 = r.next(11);n3 = Mabs(r.next() %11);相对于整数区间,0,10区间和0,11)区间等价,所以即生成0,11)区间的整数。g、生成-3,15)区间的整数n4 = r.next(18) - 3;n4 = Mabs(r.next() %18) - 3;生成非从 0 开始区间的随机整数,可以参看上面非从 0 开始的小数区间实现原理的说明。h、几率实现按照一定的几率实现程序逻辑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年庄河市大学生政务实习“扬帆计划”暨寒假“返家乡”社会实践活动开始!考试备考题库及答案解析
- 2026年甘肃天水市事业单位引进高层次人才(219人)备考笔试试题及答案解析
- 2025浙江嘉兴市海宁市老干部活动中心招聘1人参考笔试题库附答案解析
- 2025青海海南州同德县人民医院招聘消防专职人员1人备考笔试题库及答案解析
- 2025年江西省赣房投资集团有限公司社会招聘6人参考笔试题库附答案解析
- 2025海南省海宾酒店管理集团有限公司招聘2人备考笔试题库及答案解析
- 2025浙江宁波和丰产业园(集团)有限公司招聘3人备考笔试题库及答案解析
- 2025重庆沪渝创智生物科技有限公司社会招聘5人备考考试试题及答案解析
- 2025天津市西青经开区投资促进有限公司面向全国公开招聘招商管理人员4人备考考试试题及答案解析
- 网店提成合同范本
- 2025至2030中国船用防冻剂行业项目调研及市场前景预测评估报告
- 智慧停车系统培训课件大纲
- 阴囊挫伤课件
- 金融新势力:智能投顾
- 融媒体传播专业知识培训课件
- 保持器课件教学课件
- 去毛刺培训知识课件
- 2025公共基础知识考试题库及答案详解(真题汇编)
- 实施指南(2025)《JC-T 2822-2024 水泥替代原料》
- 2025餐饮联营合同-协议范本(标准版)
- 中介服务选取管理办法
评论
0/150
提交评论