抽奖随机数与枚举优秀PPT.ppt
抽奖随机数与枚举抽奖随机数与枚举你现在浏览的是第一页,共17页内容介绍内容介绍n11.1 任务预览任务预览n11.2 随机数及随机数及Random类类n11.3 可变参数方法可变参数方法n11.4 枚举类型枚举类型n11.5 本章小结本章小结n11.6 实训实训11:抽奖:抽奖你现在浏览的是第二页,共17页11.1 任务预览任务预览 n本章实训程序运行结果:本章实训程序运行结果:你现在浏览的是第三页,共17页11.2 随机数及随机数及Random类类 njava.util包的包的Random类对象是随机数生成器。如:类对象是随机数生成器。如:Random rand=new Random();Random rand2=new Random(12345L);/long型型随机数种子随机数种子n一般情况下,无需在一般情况下,无需在Random构造方法中给出随机数种子。构造方法中给出随机数种子。n生成随机数例:生成随机数例:int ir=rand.nextInt(100);/生成生成0到到99int随机数随机数double dr=rand.nextDouble();/生成生成0到到1(不含不含1)以内的以内的double型随机数型随机数n注意:还可调用注意:还可调用Math类的静态方法类的静态方法random()生成大于等生成大于等于于 0且小于且小于 1的的double型随机数:型随机数:Math.random()你现在浏览的是第四页,共17页【例【例11-1】编程,随机抽取】编程,随机抽取1到到100范围内范围内10个个不同的数,并按升序输出。不同的数,并按升序输出。n分析:只是抽取分析:只是抽取10个不考虑重复情况的随机数的代码:个不考虑重复情况的随机数的代码:import java.util.*;public class Example1_2 public static void main(String args)Random rand=new Random();int nums=new int10;/存放随机数数组存放随机数数组 for(int i=0;i10;i+)numsi=rand.nextInt(100)+1;/生成随机数生成随机数 Arrays.sort(nums);/数组元素按升序排序数组元素按升序排序 System.out.println(1到到100范围内的范围内的10个随机数如下:个随机数如下:);System.out.println(Arrays.toString(nums);你现在浏览的是第五页,共17页生成生成10个相互不重复的随机数程序个相互不重复的随机数程序 n在每次生成随机数时,把它依次与存在的随机数作比较。在每次生成随机数时,把它依次与存在的随机数作比较。Random rand=new Random();int nums=new int10;for(int i=0;i10;i+)whiletag:while(true)/带标号语句,抽取第带标号语句,抽取第i个随机数个随机数 int randNum=rand.nextInt(100)+1;/生成随机数生成随机数 for(int j=0;ji;j+)/与数组保存的随机数依次比较与数组保存的随机数依次比较 if(randNum=numsj)/如果有重复,如果有重复,continue whiletag;/则继续则继续while循环循环(抽数抽数)numsi=randNum;/不重复,随机数保存到数组不重复,随机数保存到数组 break whiletag;/结束结束while循环,返回外层循环,返回外层for循环循环 Arrays.sort(nums);/数组元素按升序排序数组元素按升序排序System.out.println(1到到100范围内不重复的范围内不重复的10个随机数:个随机数:);System.out.println(Arrays.toString(nums);你现在浏览的是第六页,共17页11.3 可变参数方法可变参数方法 类型类型.形参代表形参代表n方法调用时允许给出类型相同但数目不同的参数,例如方法调用时允许给出类型相同但数目不同的参数,例如0个、个、1个、个、2个、个、10个,等等。也可用数组作实参个,等等。也可用数组作实参.n形参代表可看作是一个数组变量。形参代表可看作是一个数组变量。n一个方法只能有一个可变数目参数,并且是最后一个参数。一个方法只能有一个可变数目参数,并且是最后一个参数。你现在浏览的是第七页,共17页【例【例【例【例11-211-2】定义数目可变参数的方法,进行求和、找】定义数目可变参数的方法,进行求和、找】定义数目可变参数的方法,进行求和、找】定义数目可变参数的方法,进行求和、找最大值。最大值。最大值。最大值。class MethodC /方法类方法类 public static double sum(double.nums)throws Exceptionif(nums.length=0)/可变参数长度即参数个数可变参数长度即参数个数 throw new Exception(没有数据、无法求和异常没有数据、无法求和异常);double sumvalue=0;for(int i=0;inums.length;i+)sumvalue+=numsi;return sumvalue;(1个数之和:个数之和:+MethodC.sum(1);(2个数之和:个数之和:+MethodC.sum(1,2);(3个数之和:个数之和:+MethodC.sum(1,2,3);(以数组作实参求以数组作实参求3个数之和:个数之和:+MethodC.sum(new double1,2,3);你现在浏览的是第八页,共17页【例【例【例【例11-311-3】编程,定义抽奖方法进行抽奖。】编程,定义抽奖方法进行抽奖。】编程,定义抽奖方法进行抽奖。】编程,定义抽奖方法进行抽奖。/4个参数抽号方法:起始号、终止号、抽取个数、排除号码个参数抽号方法:起始号、终止号、抽取个数、排除号码(可变参数可变参数)public static int raffleNums(int from,int to,int amount,int.exclusion)throws Exception /在类在类Raffle 中定义中定义 if(to-from+1)-exclusion.length amount)throw(抽取范围内的数量必须不小于要抽取的个数抽取范围内的数量必须不小于要抽取的个数);Random rand=new Random();int nums=new intamount;for(int i=0;iamount;i+)whiletag:while(true)/抽取抽取from到到to之间不重复随机数之间不重复随机数 int randNum=rand.nextInt(to-from+1)+from;for(int j=0;ji;j+)/与已有随机数比较与已有随机数比较 if(randNum=numsj)/如果有重复,如果有重复,continue whiletag;/则继续则继续while循环循环(抽数抽数)for(int k=0;kexclusion.length;k+)/比较排除的号码比较排除的号码 if(randNum=exclusionk)continue whiletag;numsi=randNum;/不重复,保存到数组不重复,保存到数组break whiletag;/结束结束while循环,返回外层循环,返回外层for循环循环 return nums;你现在浏览的是第九页,共17页续续11-3 public static void main(String args)trySystem.out.println(抽取抽取20到到40范围内范围内6个数,排除个数,排除25和和35,结果如,结果如下:下:);int nums=Raffle.raffleNums(20,40,6,25,35);Arrays.sort(nums);System.out.println(Arrays.toString(nums);System.out.println(抽取抽取1到到10范围内范围内5个数,排除个数,排除2、3和和4,结果如下:,结果如下:);int nums2=Raffle.raffleNums(1,10,5,2,3,4);System.out.println(抽取抽取101到到200范围内范围内8个数,结果如下:个数,结果如下:);int nums3=Raffle.raffleNums(101,200,8);catch(Exception e)你现在浏览的是第十页,共17页11.4 枚举类型枚举类型 n声明、定义枚举类型简要语法:声明、定义枚举类型简要语法:enum 枚举类型名枚举类型名 枚举常量表枚举常量表 n如:如:enum Season Spring,Summer,Autumn,Winter n枚举类型枚举类型Season有有4个枚举常量。个枚举常量。n使用枚举常量须用枚举类型名作前缀,如使用枚举常量须用枚举类型名作前缀,如 Season.Springn输出时只显示枚举常量名,如输出时只显示枚举常量名,如 Spring。n枚举类型和枚举常量都是标识符,可用中文起名。如:枚举类型和枚举常量都是标识符,可用中文起名。如:nenum 季节季节 春春,夏夏,秋秋,冬冬 n于是,枚举常量表示为:季节于是,枚举常量表示为:季节.春、季节春、季节.夏,等等。夏,等等。n注意:枚举是特殊的类类型。成员除了枚举常量外,还可包注意:枚举是特殊的类类型。成员除了枚举常量外,还可包含构造函数、字段和方法。一般语法形式:含构造函数、字段和方法。一般语法形式:enum 枚举类型名枚举类型名 允许包含参数的枚举常量表允许包含参数的枚举常量表;字段字段;构造函数构造函数;方法方法 你现在浏览的是第十一页,共17页【例【例【例【例11-411-4】编程,定义表示季节的枚举类型,然后】编程,定义表示季节的枚举类型,然后】编程,定义表示季节的枚举类型,然后】编程,定义表示季节的枚举类型,然后输出相关的枚举常量。输出相关的枚举常量。输出相关的枚举常量。输出相关的枚举常量。enum Season Spring,Summer,Autumn,Winter /枚举类型枚举类型public class Example4 /主类主类 public static void main(String args)System.out.print(上半年有上半年有2季:季:);Season q1=Season.Spring;/枚举变量声明和赋值枚举变量声明和赋值 Season q2=Season.Summer;System.out.println(q1+,+q2);System.out.print(上半年季节序号:上半年季节序号:);System.out.print(q1.ordinal()+,+q2.ordinal();/量序号量序号 System.out.println(n一年一年4季是:季是:);Season quarter;/声明季节枚举类型变量声明季节枚举类型变量 for(int i=0;i4;i+)quarter=Season.values()i;/Season数组数组System.out.print(quarter+);你现在浏览的是第十二页,共17页【例【例11-5】编程,定义一个含有构造函数、字段】编程,定义一个含有构造函数、字段和方法的关于奖品的枚举类型。在主类中输出这和方法的关于奖品的枚举类型。在主类中输出这些奖品的名称、价值和数量。些奖品的名称、价值和数量。enum AwardType /奖品枚举类型奖品枚举类型手提电脑手提电脑(5000,1),/奖品名称奖品名称(价值价值,数量数量)电视机电视机(3000,2),电冰箱电冰箱(1800,3),洗衣机洗衣机(1200,5),微波炉微波炉(600,10);private int worth;/价值字段价值字段private int amount;/数量字段数量字段AwardType(int worth,int amount)/非非public构造方法构造方法 this.worth=worth;this.amount=amount;public int getWorth()/获取价值方法获取价值方法 return this.worth;public int getAmount()/获取数量方法获取数量方法 return this.amount;你现在浏览的是第十三页,共17页续例续例11-5public class Example5 /主类主类public static void main(String args)System.out.println(所有奖品如下:所有奖品如下:);for(AwardType aw:AwardType.values()System.out.print(aw.name();System.out.print(:价值:价值+aw.getWorth()+元,元,);System.out.print(数量数量+aw.getAmount()+个个);System.out.println();你现在浏览的是第十四页,共17页11.5 本章小结本章小结 n随机类随机类Random对象的方法能生成一定范围内的随机数,数对象的方法能生成一定范围内的随机数,数据类型有整型、实型等。据类型有整型、实型等。n方法中数目可变的参数即相当于一个数组,不过每次调用时方法中数目可变的参数即相当于一个数组,不过每次调用时允许直接给出数目不等的数据作实参。允许直接给出数目不等的数据作实参。n可变参数是数组参数的一种扩充。可变参数是数组参数的一种扩充。n一个方法最多只能有一个可变参数,并且只能排在后面。一个方法最多只能有一个可变参数,并且只能排在后面。n枚举类型是特殊的类类型,对象就是大括号内的枚举常量。枚举类型是特殊的类类型,对象就是大括号内的枚举常量。n枚举类型专门用于管理内容固定、数量有限的数据。枚举类型专门用于管理内容固定、数量有限的数据。n枚举不同于数组,数组的元素相当于一个变量,而枚举元素枚举不同于数组,数组的元素相当于一个变量,而枚举元素则是常量。则是常量。你现在浏览的是第十五页,共17页11.6 实训实训11:抽奖:抽奖 n(1)编写按号码进行抽奖的程序,功能如下:抽号范围可)编写按号码进行抽奖的程序,功能如下:抽号范围可随意设置,共有随意设置,共有3个等级,各等奖的个数也可随意设置,但个等级,各等奖的个数也可随意设置,但抽奖总数不能大于抽号范围数,并且中奖号码不能重复。抽奖总数不能大于抽号范围数,并且中奖号码不能重复。n(2)编写人人有份的抽奖程序,设奖品有:手提电脑、电)编写人人有份的抽奖程序,设奖品有:手提电脑、电视机、冰箱、洗衣机、微波炉等家用电器(这里不考虑奖品视机、冰箱、洗衣机、微波炉等家用电器(这里不考虑奖品的数量,假设每人都能抽到一个奖品的数量,假设每人都能抽到一个奖品人人有份)。要求人人有份)。要求运行程序时输入标识抽奖者的任意字符串,便可抽到其中一运行程序时输入标识抽奖者的任意字符串,便可抽到其中一种奖品,若输入种奖品,若输入exit,则结束程序。,则结束程序。你现在浏览的是第十六页,共17页谢谢!谢谢!返回目录 结束放映你现在浏览的是第十七页,共17页