版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JaVa程序设计任务式教程01任务5-1乐自助餐饮订单02任务5-2乐自助食材备货03任务5-3增强型文件记事本目录CONTNETS单元五面向对象编程进阶单元目标能够使用集合类存储和操作数据,例如添加、删除、查找、遍历等。能够使用迭代器遍历集合元素。能够使用foreach循环遍历集合、枚举。能够使用泛型定义和使用集合类,提高代码的可读性和安全性。能够熟练使用集合框架进行数据组织和管理,包括列表、集合和映射。能够使用IO流进行基本的文件操作,如读取、写入和文件管理。培养良好的编程习惯,能够根据实际需求选择合适的集合类。发展逻辑思维和问题解决能力,提高代码的效率和可读性。培养数据安全意识,增强代码的安全性,避免类型错误。知识目标能力目标素养目标学习目标熟悉JavaAPI中常用类的功能StringBuffe、Math、Random等。掌握包装类的使用方法。理解并掌握集合、泛型、枚举类的使用方法理解Lambda表达式并能够使用Lambda表达式简化代码。掌握IO流操作文件的使用方法01任务5-1乐自助餐饮订单包装类String类、StringBuffer和StringBuilder类日期时间类Math类和Random类Lambda表达式任务5-1乐自助餐饮订单-Java常用API包装类在Java中“一切皆对象”,很多方法都需要引用类型的对象,但是8种基本数据类型却不是面向对象的,这在实际使用时会存在很多的不便,Java中8种基本数据类型存在其对应类的类型,也就是把基本数据类型包装成类。基本类型对应的包装类如表基本数据类型包装类intIntegercharCharacterfloatFloatdoubleDoublebyteBytelongLongshortShortbooleanBoolean列举的8种基本数据类型及其对应的包装类。除了Integer和Character类外,其他对应的包装类的名称都与其基本数据类型一致,只不过首字母需要大写任务5-1乐自助餐饮订单-Java常用API包装类在包装类和基本数据类型进行转换时,需引入了自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)的概念,其中自动装箱是指将基本数据类型的变量赋给对应的包装类变量;反之,拆箱是指将包装类对象类型直接赋给一个对应的基本数据类型变量任务5-1乐自助餐饮订单-Java常用API包装类如例5-1,以Integer和Character包装类,演示装箱、拆箱操作,详见AutoboxingUnboxingDemo.java1publicclassAutoboxingUnboxingDemo{2 publicstaticvoidmain(String[]args){3 //自动装箱示例-基本类型转换为包装类对象4 IntegerintObject=100;//int被自动装箱为IntegerCharactercharObject='A';//char被自动装箱为Character6 //输出装箱后的对象7 System.out.println("Integer对象:"+intObject);8 System.out.println("Character对象:"+charObject);9 //自动拆箱示例-包装类对象转换为基本类型10 intintPrimitive=intObject;//Integer被自动拆箱为intcharcharPrimitive=charObject;//Character被自动拆箱为char12 //输出拆箱后的基本类型13 System.out.println("int基本类型:"+intPrimitive);14 System.out.println("char基本类型:"+charPrimitive);15 IntegernullInteger=null;16 //null处理,抛出NullPointerException17 if(nullInteger!=null){18 intsafeIntPrimitive=nullIValue();System.out.println("安全的int基本类型:"+safeIntPrimitive);20 }else{System.out.println("Integer对象是null,
无法拆箱");22 }23 }24}任务5-1乐自助餐饮订单-Java常用API包装类在上面的代码中,首先演示了自动装箱,将基本类型的int和char值分别赋值给Integer和Character类型的变量,编译器会自动进行装箱操作。接着,演示了自动拆箱,将Integer和Character类型的对象赋值给基本类型的变量,编译器会自动进行拆箱操作。值得注意的是,如果包装类对象是null,直接进行拆箱将会抛出NullPointerException。为了避免这个问题,在进行拆箱前应该检查对象是否为null。然后进行拆箱处理。装箱拆箱操作的运行结果任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类String、StringBuffer和StringBuilder是用于处理字符串的三个主要类。String用于表示不可变的字符序列,一旦创建,字符串的内容就不能改变;StringBuffer、StringBuilder类用于表示可变的字符序列,字符串的内容可以在运行时改变。任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类String是字符串常量类,在使用String类时,首先需要对String类进行初始化操作,可过以下两种方式对String类进行初始化,具体如下:1、使用字符串常量直接初始化一个String对象,具体代码如下:Stringstr="isstring";这种方法创建字符串对象时,不一定分配内存,如果内存中已经存在常量“isstring”,则str直接引用即可,不存在时才创建。任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类String是字符串常量类,在使用String类时,首先需要对String类进行初始化操作,可过以下两种方式对String类进行初始化,具体如下:2、使用String的构造方法初始化字符串对象,String类的构造方法如表方法声明功能描述String()创建一个内容为空的字符串对象String(Stringvalue)根据指定的字符串内容创建对象String(char[]value)根据指定的字符数组创建对象String(char[]intstartIndex,intnumChars)根据指定的字符数组,以字符串数组中startIndex位置开始的numChars个字符,创建对象String(byte[]bytes)根据指定的字节数组创建对象String(byte[]bytes,intoffset,intlength)根据指定的字节数组,以字节数组offset位置开始的length个字节,创建对象任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类如例5-2,通过一个案例来学习String类的使用,详见StringDemo.java……4//直接赋值5Stringstr1="Hello,World!";6System.out.println("直接赋值:"+str1);7//使用字符串变量赋值8Stringstr2=newString("Hello,World!");9System.out.println("字符串变量赋值:"+str2);10//使用字符数组赋值11char[]charArray={'H','e','l','l','o',',','','W','o','r','l','d','!'};12Stringstr3=newString(charArray);13System.out.println("字符数组赋值:"+str3);14//使用字符数组的一部分赋值15Stringstr4=newString(charArray,0,5);16System.out.println("字符数组的一部分赋值:"+str4);17//使用字节数组赋值18byte[]byteArray={72,101,108,108,111,44,32,87,111,114,108,100,33};19Stringstr5=newString(byteArray);20System.out.println("字节数组赋值:"+str5);21//使用字节数组的一部分赋值22Stringstr6=newString(byteArray,0,8);23System.out.println("字节数组的一部分赋值:"+str6);……任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类上述代码种分别使用直接赋值和构造方法创建字符串对象,演示了String用法,运行结果如图任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类在实际应用开发中,字符串的基本操作有连接、替换和删除等,如表操作说明连接字符串使用+运算符或String.concat()方法连接两个或多个字符串替换字符串使用replace()方法替换字符串中的子串删除字符串使用delete()方法删除字符串中的子串插入字符串使用insert()方法在字符串中的指定位置插入字符串反转字符串使用reverse()方法反转字符串中的字符顺序获取字符串长度使用length()方法获取字符串的长度获取字符串子串使用substring()方法获取字符串的子串比较字符串使用equals()方法比较两个字符串是否相等,使用compareTo()方法比较两个字符串的大小查找字符串使用indexOf()和lastIndexOf()方法查找字符串中的子串或字符分割字符串使用split()方法根据指定分隔符将字符串分割成数组转换大小写使用toLowerCase()和toUpperCase()方法将字符串转换为小写或大写字符串与数值的转换使用valueOf()方法将数值转换为字符串,使用Integer.parseInt()等方法将字符串转换为数值任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类如例5-3,使用字符串的连接、替换、删除和分割基本操作对一个字符串进行处理,详见StringProcessingDemo.java……4//初始字符串5StringoriginalString="Hello,World!";6//连接字符串7StringconcatenatedString=originalString+"新的征程即将开始。";8System.out.println("连接后的字符串:"+concatenatedString);9//替换字符串10StringreplacedString=concatenatedString.replace("World","Java");11System.out.println("替换后的字符串:"+replacedString);12//删除字符串13StringdeletedString=replacedString.replace("Java","");14System.out.println("删除后的字符串:"+deletedString);15//分割字符串16String[]splitStrings=deletedString.split(",");17System.out.println("分割后的字符串数组:");18for(Strings:splitStrings){19 System.out.println(s);}……任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-String类上述代码演示了字符串的连接、替换、删除和分割的基本用法,其运用结果如图任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-StringBuffer和StringBuilder类StringBuffer和StringBuilder类均表示可变字符串,在用法上也基本相同,这些操作都不会创建新的对象,而是在原对象上进行修改。两者的主要区别在于线程安全性:StringBuilder不是线程安全的,它是单线程环境下使用的一个高效选择。在单线程环境中,使用StringBuilder可以避免同步的开销,从而提高性能。StringBuffer是线程安全的,它可以在多线程环境中安全地被共享和修改。当操作需要被多个线程访问时,使用StringBuffer可以防止并发修改时可能出现的ConcurrentModificationException。任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-StringBuffer和StringBuilder类StringBuffer和StringBuilder类提供了一系列的方法,具体如表方法说明append(Stringstr)将指定的字符串追加到当前字符串末尾append(char[]str)将指定的字符数组中的字符追加到当前字符串末尾append(char[]str,intoffset,intlen)将指定字符数组中的子数组追加到当前字符串末尾insert(intoffset,Stringstr)在指定位置插入指定的字符串insert(intoffset,char[]str)在指定位置插入指定的字符数组insert(intoffset,char[]str,intfromIndex,inttoIndex)在指定位置插入指定字符数组中的子数组delete(intstart,intend)删除指定位置之间的字符串deleteCharAt(intindex)删除指定位置的字符replace(intstart,intend,Stringstr)替换指定位置之间的字符串reverse()反转字符串中的字符顺序setCharAt(intindex,charch)设置指定位置的字符substring(intstart)返回从指定位置开始的子字符串substring(intstart,intend)返回从指定位置开始到指定位置结束的子字符串toString()返回当前字符串的String对象表示length()返回当前字符串的长度charAt(intindex)返回指定位置的字符任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-StringBuffer和StringBuilder类如例5-4,演示StringBuffer常见操作,详见StringBufferDemo.java1 publicclassStringBufferDemo{2 publicstaticvoidmain(String[]args){3 StringBuffernewstr=newStringBuffer("新的征程,必有新的光辉");4 //追加5 newstr.append("!").append("").append("加油!");6 System.out.println("追加后:"+newstr);7 //替换8 newstr.replace(0,2,"炫丽");9 System.out.println("替换后:"+newstr);10 //删除11 newstr.delete(13,17);12 System.out.println("删除后:"+newstr);13 //插入14 newstr.insert(10,"的");15 System.out.println("插入后:"+newstr);16 //反转17 newstr.reverse();18 System.out.println("反转后:"+newstr);19 }20 }任务5-1乐自助餐饮订单-Java常用APIString类、StringBuffer和StringBuilder类-StringBuffer和StringBuilder类上述代码分别对指定的字符串进行了追加、替换、删除、插入、反转操作,其运行结果如图任务5-1乐自助餐饮订单-Java常用API日期时间类Java8引入了一个全新的日期和时间处理API,取代了之前的java.util.Date和java.util.Calendar类。比如,在新的java.time包中的LocalDate、LocalTime、LocalDateTime,这些类分别表示日期、时间和日期加时间;DateTimeFormatter,用于格式化和解析日期和时间;Duration和Period,分别表示以年月日,秒和纳秒为单位两个时间点之间的时间间隔。任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalDate类LocalDate类是一个不可变的日期时间类,它包含年、月、日三个属性。LocalDate类可以使用LocalDate.of(intyear,intmonth,intdayOfMonth)静态方法,传入年、月、日的整数值来创建一个LocalDate实例,也可以使用LocalDate.now()方法来获取当前日期。其语法格式如下://使用静态方法创建LocalDate实例LocalDatedate1=LocalDate.of(2024,8,15);//获取当前日期LocalDatedate2=LocalDate.now();任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalTime类LocalTime类是一个不可变的时间类,用于表示一个具体的时间,例如上午9点30分。LocalTime类可以使用LocalTime.of(inthour,intminute,intsecond)静态方法,传入小时、分、秒的整数值来创建一个LocalTime实例,可以使用LocalTime.now()方法来获取当前时间。其语法格式如下://获取当前时间LocalTimetime1=LocalTime.now();//使用静态方法创建LocalTime实例LocalTimetime2=LocalTime.of(23,8,15);任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalTime类LocalTime可以用于时间加减、比较、计算时差、格式与解析时间等操作方法,详见表方法声明功能描述时间加减LocalTime.plusHours(longhours)将时间增加指定的小时数LocalTime.minusHours(longhours)将时间减少指定的小时数LocalTime.plusMinutes(longminutes)将时间增加指定的分钟数LocalTime.minusMinutes(longminutes)将时间减少指定的分钟数LocalTime.plusSeconds(longseconds)将时间增加指定的秒数LocalTime.minusSeconds(longseconds)将时间减少指定的秒数获取时间LocalTime.getHour()获取小时LocalTime.getMinute()获取分钟LocalTime.getSecond()获取秒格式化与解析LocalTime.format(DateTimeFormatterformatter)将LocalTime对象格式化为字符串LocalTime.parse(CharSequencetext)将字符串解析为LocalTime对象计算时差LocalTime.until(LocalTimeendExclusive,ChronoUnitunit)使用指定的两个时间,计算时差比较LocalTime.isBefore(LocalTimeother)判断当前时间是否早于另一个时间LocalTime.isAfter(LocalTimeother)判断当前时间是否晚于另一个时间LocalTime.isEqual(LocalTimeother)判断当前时间是否等于另一个时间LocalTime.isBefore(LocalTimeother)判断当前时间是否早于另一个时间LocalTime.isAfter(LocalTimeother)判断当前时间是否晚于另一个时间LocalTime.isEqual(LocalTimeother)判断当前时间是否等于另一个时间任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalDateTime类LocalDateTime类是一个不可变的时间类,用于表示一个具体的日期和时间,该类实际是LocalDate和LocalTime的组合。LocalDateTime类可以使用LocalTime.of(LocalDatedate,LocalTimetime)静态方法,传入日期和时间的整数值来创建一个LocalDateTime实例,可以使用LocalDateTime.now()方法来获取当前日期和时间。任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalDateTime类LocalDateTime可以用于时间加减、比较、计算时差、格式与解析时间等操作方法,详见表方法声明功能描述时间加减LocalDateTime.plusDays(longdays)将日期时间增加指定天数LocalDateTime.minusDays(longdays)将日期时间减少指定天数LocalDateTime.plusHours(longhours)将日期时间增加指定小时数LocalDateTime.minusHours(longhours)将日期时间减少指定小时数LocalDateTime.plusMinutes(longminutes)将日期时间增加指定分钟数LocalDateTime.minusMinutes(longminutes)将日期时间减少指定分钟数LocalDateTime.plusSeconds(longseconds)将日期时间增加指定秒数LocalDateTime.minusSeconds(longseconds)将日期时间减少指定秒数获取日期时间LocalDateTime.toLocalDate()获取日期部分LocalDateTime.toLocalTime()获取时间部分LocalDateTime.getYear()获取年份LocalDateTime.getMonth()获取月份LocalDateTime.getDayOfMonth()获取一个月中的第几天LocalDateTime.getHour()获取小时LocalDateTime.getMinute()获取分钟LocalDateTime.getSecond()获取秒任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-LocalDateTime类LocalDateTime可以用于时间加减、比较、计算时差、格式与解析时间等操作方法,详见续表方法声明功能描述格式化与解析LocalDateTime.format(DateTimeFormatterformatter)将LocalDateTime对象格式化为字符串LocalDateTime.parse(CharSequencetext)将字符串解析为LocalDateTime对象计算时差LocalDateTime.until(LocalDateTimeendExclusive,ChronoUnitunit)使用指定的两个日期和时间,计算时差比较LocalDateTime.isBefore(LocalDateTimeother)判断当前日期时间是否早于另一个日期时间LocalDateTime.isAfter(LocalDateTimeother)判断当前日期时间是否晚于另一个日期时间LocalDateTime.isEqual(LocalDateTimeother)判断当前日期时间是否等于另一个日期时间任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-ZoneId类ZoneId类用于表示特定的时区标识符,为日期时间对象提供时区信息。如“Asia/Shanghai”或“America/New_York”,也可以代表一个时区偏移量,如“+08:00”。也可以将ZoneId对象从一个时区转换为另一个时区其语法格式如下://指定时区ID来获取ZoneIdZoneId.of("Asia/Shanghai")//通过ZoneOffset对象获取ZoneIdZoneId.ofOffset("+08:00",ZoneOffset.of("+08:00"))任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-ZonedDateTime类ZonedDateTime类,包含了时区和日期时间的组合,用于表示特定时区中的日期和时间。可以用于跨时区的时间比较和操作。其语法格式如下://通过ZoneId对象来创建ZonedDateTimeZonedDateTime.of(LocalDateTime.now(),ZoneId.of("Asia/Shanghai"))//通过Instant对象和ZoneId对象来创建ZonedDateTimeZonedDateTime.ofInstant(Instant.now(),ZoneId.of("Asia/Shanghai"))任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-ZonedDateTime类如例5-5,通过一个案例演示以上日期和时间类用法,详见TimeDemo.java……10//获取当前日期和时间11LocalDatetoday=LocalDate.now();12LocalTimenow=LocalTime.now();13LocalDateTimedateTime=LocalDateTime.now();14System.out.println("今天是:"+today);15System.out.println("现在是:"+now);16System.out.println("当前日期时间:"+dateTime);17//创建指定日期和时间18LocalDatebirthday=LocalDate.of(1999,7,1);19LocalTimemeetingTime=LocalTime.of(10,30);20System.out.println("生日:"+birthday);21System.out.println("会议时间:"+meetingTime);22//日期计算23LocalDatetomorrow=today.plusDays(1);24System.out.println("明天是:"+tomorrow);……任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-ZonedDateTime类如例5-5,通过一个案例演示以上日期和时间类用法,详见TimeDemo.java……25//时区转换26ZoneIdshanghaiZone=ZoneId.of("Asia/Shanghai");27ZonedDateTimeshanghaiDateTime=LocalDateTime.now().atZone(shanghaiZone);28System.out.println("上海时间:"+shanghaiDateTime);29//格式化日期时间30DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");31StringformattedDateTime=dateTime.format(formatter);32System.out.println("格式化日期时间:"+formattedDateTime);33//解析日期时间34LocalDateTimeparsedDateTime=LocalDateTime.parse("2024-06-0610:30:30",formatter);35System.out.println("解析指定日期时间:"+parsedDateTime);……任务5-1乐自助餐饮订单-Java常用API日期时间类-日期时间和时区类-ZonedDateTime类上述代码中,首先导入程序所需的java.time包中的类,然后使用Java中的日期和时间类来获取当前日期和时间、创建特定日期和时间、进行日期计算、时区转换、格式化和解析日期时间,日期时间类操作运行结果如图任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Math类Math类用于执行基本的数学运算,如取绝对值、取整、计算最大值和最小值、计算幂、生成随机数等。此外,它还提供了三角函数和角度与弧度之间的转换方法,方便进行更复杂的数学计算。Math类位于java.lang包中,由JVM自动将该包中的类导入应用程序中。Math类中,大致可以分为3类:一类表示常量如Math.PI;一类表示计算用途的方法如floor(doublea),pow(doublea,doubleb);一类用于转换操作如toRadians(doubleangdeg)。Math类的构造方法是私有的,因此它不能被实例化,另外,Math类是用final修饰的,因此不能有子类任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Math类Math类常用方法,如表方法声明功能描述staticintabs(inta)返回绝对值staticdoubleceil(doublea)返回大于或等于参数的最小整数staticdoublefloor(doublea)返回小于或等于参数的最大整数staticintmax(inta,intb)返回两个参数的较大值staticintmin(inta,intb)返回两个参数的较小值random()生成一个大于等于0.0且小于1.0的随机double值staticlonground(doublea)返回四舍五入的整数值staticdoublesqrt(doublea)平方根函数staticdoublepow(doublea,doubleb)幂运算任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Math类如例5-6,通过一个简单的数学计算案例演示Math类常用方法,详见MathDemo.java1publicclassMathDemo{2 publicstaticvoidmain(String[]args){3 //基本数学运算4 doublenumber=4.0;5 //输出结果6 System.out.println("绝对值:"+Math.abs(number));7 System.out.println("平方根:"+Math.sqrt(number));8 System.out.println("幂:"+Math.pow(number,2));9 System.out.println("四舍五入:"+Math.round(number));10 System.out.println("正弦:"+Math.sin(Math.PI/2));11 System.out.println("正切:"+Math.tan(Math.PI/4));12 System.out.println("自然对数:"+Math.log(Math.E));13 System.out.println("指数:"+Math.exp(Math.PI));14 System.out.println("随机数:"+Math.random());15 }16}任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Math类以上代码的运行结果如图任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Random类Random类位于java.util包中,可以产生boolean、int、long、float、byte数组以及double类型的随机数,这是它与random()方法最大的不同之处该类常用的有如下两个构造方法。Random():该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造Random对象。Random(longseed):使用单个long类型的参数创建一个新的随机数生成器任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Random类Random类常用方法如表方法申明功能描述publicbooleannextBoolean()生成一个随机的boolean值,true和false的值几率相等publicdoublenextDouble()生成一个随机的double值,数值介于[0,1.0)之间publicintnextInt()生成一个随机的int的区间值,也就是-231
到231-1之间publicintnextInt(intn)生成一个随机的int值,该值介于[0,n)的区间publicvoidsetSeed(longseed)重新设置Random对象中的种子数任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Random类如例5-7,通过一个统计随机数出现次数的案例演示Random类使用,详见RandomDemo.java4intN=100;//给定的整数N5Randomrandom=newRandom();6int[]randomInts=newint[N];7int[]counts=newint[101];//数组大小为101,因为整数范围是1到1009for(inti=0;i<N;i++){8//生成N个随机整数并统计每个整数出现的次数10 intrandomInt=random.nextInt(100)+1;//生成介于1到100之间的随机整数11 randomInts[i]=randomInt;12 counts[randomInt]++;13}14intmaxCount=0;//找出出现次数最多的前三个整数及其对应的次数15int[]topThree=newint[3];16for(inti=1;i<=100;i++){17 if(counts[i]>maxCount){18 maxCount=counts[i];19 topThree[0]=i;20 topThree[1]=0;21 topThree[2]=0;22 }elseif(counts[i]==maxCount){23 if(topThree[2]==0){24 topThree[2]=i;25 }26 }27}任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Random类在上述代码中,使用了一个int[]randomInts来存储生成的随机整数,以及一个int[]counts来记录每个整数出现的次数。然后,我们使用一个循环来找出出现次数最多的前三个整数及其对应的次数。本次运行的结果如图任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Lambda表达式Lambda表达式是一种匿名函数,没有名称,但可以像普通函数一样接收参数和返回值。它由箭头“->”连接一个或多个参数和一个表达式或代码块组成,支持函数式编程,允许把函数作为一个方法的参数(函数作为参数传递进方法中)。Lambda表达式可以用于集合操作、事件处理等各种场景。语法格式如下:(parameters)->expression或(parameters)->{statements;}上述语法格式中,parameters是参数列表,expression或{statements;}是Lambda表达式的主体。如果只有一个参数,可以省略括号;如果没有参数,也需要空括号。任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Lambda表达式如例5-8,通过一个使用lambda表达式操作数组的排序和打印案例,演示lambda表达式的基本用法和函数式编程的用法。详见LambdaSortAndPrintExample.java1. importjava.util.Arrays;2. publicclassLambdaSortAndPrintExample{3. publicstaticvoidmain(String[]args){4. //定义一个Integer数组5. Integer[]numbers={5,2,9,1,5,6};6. //使用Lambda表达式和Arrays.sort()方法对数组进行排序7. Arrays.sort(numbers,(a,b)->a-b);//升序排序8. //使用Arrays.stream()方法和forEach()方法打印排序后的数组9. Arrays.stream(numbers).forEach(System.out::println);10. 11. //降序排序,可以修改Lambda表达式为:12. Arrays.sort(numbers,(a,b)->b-a);//降序排序13. //再次打印排序后的数组(降序)14. System.out.println("降序排序后的数组:");15. Arrays.stream(numbers).forEach(System.out::println);16. }17. }任务5-1乐自助餐饮订单-Java常用APIMath类和Random类-
Lambda表达式上述代码中,利用Lambda表达式和StreamAPI对整数数组进行排序,然后打印出来。首先,代码使用Lambda表达式定义了一个比较器,指定数组元素按照升序排列。接着,代码将数组转换成流,并通过流中的forEach方法逐个打印元素。最后,代码再次调用sort方法,使用另一个Lambda表达式实现降序排列,并打印出降序排列后的数组。其运行结果如图任务5-1乐自助餐饮订单-任务实现1.分别设计用户类、菜单类、订单类属性及获取属性的getter方法。2.菜单类,中包括菜品名称、价格、制作时间。3.订单类,包括用户ID、菜品名称、菜品价格、折扣率、最终价格、下单时间、预计准备时间。4.用户输入处理,用户ID只接收数字,错误输入后,可继续输入;点餐输入错误的菜品名称后可继续输入。5.菜单处理,使用数组和菜单类构建菜单。6.订单处理,用户点餐后,系统会根据菜品价格和折扣计算出最终价格,并使用Lambda表达式来简化订单处理逻辑。代码参考教材中的RestaurantOrderSystem.java任务5-1乐自助餐饮订单-任务实现上述代码中,因为用户、菜单、订单类均既有不可修改的特性,所以代码中定义了三个静态内部类:User(用户类)、Dish(菜单类)和Order(订单类),可以使用构造方法的形式生产菜单。在User类中,id属性,用于标识用户。在Dish类中,name、price和preparationTime属性,分别表示菜品的名称、价格和准备时间。在Order类中,user、dish、finalPrice和orderTime属性,分别表示订单的用户、菜品、最终价格和订单时间。在主方法中如果用户和输入的餐单均为有效数据,则由random随机生成一个折扣率,最后displayOrder用于显示订单详情其运行效果如图02任务5-2乐自助食材备货集合简介
Collection接口List接口 Set接口
Map接口泛型类泛型类继承泛型接口实现 Enum关键字
Enum常用方法任务5-2乐自助食材备货-集合集合简介Java集合框架主要由一组性能高效、使用简单、可用来操作对象的接口和类组成。Java集合框架位于java.util包中,其中包括接口、接口实现类、具有静态方法的工具类等。Java中的集合类是一种工具类,就像容器,存储任意数量的具有共同属性的对象在上述图中Java集合类主要由两个根接口Collection和Map派生出来,Collection派生出了三个子接口:List、Set、Queue。List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只能根据元素本身来访问;Queue是队列集合;Map代表的是存储〈Key,Value〉(键-值)对的集合,可根据元素的Key来访问Value。其中List接口的常用实现类为ArrayList、LinkedList、Vector;Set接口的常用实现类为HashSet;Map接口的常用实现类为HashMap任务5-2乐自助食材备货-集合Collection接口Collection接口中存储的是一组元素对象,接口本身并不提供直接实现,具体的操作通过子接口来实现Set接口、List接口和Queue接口都是Collection的子接口。在Collection里定义的通用方法既可用于操作Set集合,也可用于操作List集合和Queue集合。Collection接口的方法如表方法声明功能描述booleanadd(Objectobj)向集合添加一个obj元素booleanaddAll(Collectionc)将指定集合中所有元素添加到该集合voidclear()清空集合中所有元素booleancontains(Objectobj)判断集合中是否包含某个元素booleancontainsAll(Collectionc)判断集合中是否包含指定集合中所有元素booleanequals(Collectionc)比较此集合与指定对象是否相等inthashCode()返回此集合的哈希码值Iteratoriterator()返回在此集合的元素上进行迭代的迭代器booleanremove(Objecto)删除该集合中的指定元素booleanremoveAll(Collectionc)删除指定集合中所有元素booleanretainAll(Collectionc)仅保留此集合中那些也包含在指定集合c中的元素Object[]toArray()返回包含此集合中所有元素的数组booleanisEmpty()如果此集合为空,则返回trueintsize()返回此集合中元素个数任务5-2乐自助食材备货-集合Collection接口如例5-9,通过创建、添加、删除等操作演示表5-9中Collection方法的使用,详见CollectionDemo.java1importjava.util.ArrayList;2importjava.util.Collection;3publicclassCollectionDemo{4publicstaticvoidmain(String[]args){5 //创建一个集合6 Collection<String>collection=newArrayList<>();7 //添加元素8 collection.add("纯电动汽车");9 collection.add("混合动力电动汽车");10collection.add("燃料电池电动汽车");11collection.add("氢发动机汽车");12collection.add("其他新能源");13//添加后的集合14System.out.println("添加元素后,集合内容:"+collection);15//删除指定元素16collection.remove("其他新能源");17//创建新集合并添加删除后的元素18Collection<String>newCollection=newArrayList<>(collection);19System.out.println("删除元素后,集合内容:"+newCollection);20//输出新集合中元素的个数21System.out.println("新集合中元素的个数:"+newCollection.size());22}23}任务5-2乐自助食材备货-集合Collection接口上述代码中,首先创建了一个ArrayList集合,并向其中添加、打印添加后的集合;然后,使用remove删除了集合中的“其他新能源”元素,并将删除“其他新能源”后的集合添加到新集合中。最后打印新集合中元素的内容和个数。其运行结果如图任务5-2乐自助食材备货-集合List接口List集合中元素是有序的且可重复的,相当于数学里面的数列,有序可重复。使用此接口能够精确地控制每个元素插入的位置,用户可以通过索引来访问集合中的指定元素,List集合还有一个特点就是元素的存入顺序与取出顺序相一致。List接口中大量地扩充了Collection接口,拥有了比Collection接口中更多的方法定义,其中有些方法还比较常用,如表方法声明功能描述voidadd(intindex,Objectelement)在index位置插入element元素booleanaddAll(intindex,Collectionc)将集合c中所有元素插入List集合的index处Objectget(intindex)得到index处的元素Objectset(intindex,Objectelement)用element替换index位置的元素Objectremove(intindex)移除index位置的元素,并返回该元素intindexOf(Objecto)返回集合中第一次出现o的索引,若集合中不包含该元素,则返回-1任务5-2乐自助食材备货-集合List接口-ArrayList如例5-10,通过创建、添加、删除等操作演示ArrayList方法的使用,详见ArrayListDemo.java4ArrayList<String>list=newArrayList<>();5list.add("燃油型汽车");6list.add("纯电型汽车");7list.add("固态电池型汽车");8list.add("混合动力型汽车");9System.out.println("新集合:"+list);10//voidadd(intindex,Eelement)->在指定索引位置上添加元素11list.add(2,"氢燃料电池型汽车");12System.out.println("添加元素后,集合内容:"+list);13//booleanremove(Objecto)->删除指定的元素,删除成功为true,失败为false14list.remove("氢燃料电池型汽车");15System.out.println("指定的元素删除后,集合内容:"+list);16//Eremove(intindex)->删除指定索引位置上的元素17Stringelement=list.remove(0);18System.out.println("指定的索引删除后,集合内容:"+list);19//Eset(intindex,Eelement)->将指定索引位置上的元素,修改成后面的element元素20Stringelement2=list.set(0,"新能源动力汽车");21System.out.println("指定的索引修改后,集合内容:"+list);22//Eget(intindex)->根据索引获取元素23System.out.println("指定索引获取元素:"+list.get(0));24//intsize()->获取集合元素个数25System.out.println("集合元素个数:"+list.size());任务5-2乐自助食材备货-集合List接口-ArrayList上述代码中,演示了使用ArrayList类执行集合基本操作添加、删除、修改、获取元素和获取集合的大小。其运行结果如图任务5-2乐自助食材备货-集合List接口-LinkedListLinkedList是List接口的另一个实现类,它基于双向链表实现,因此添加和删除元素的操作在链表的两端非常高效(常数时间复杂度)。但在访问指定位置的元素时,可能需要遍历链表,因此效率较低。其常见的操作如表方法声明功能描述newLinkedList()或newLinkedList(Collection<?extendsE>c)创建一个LinkedListaddFirst(Ee)、addLast(Ee)、add(intindex,Eelement)在第一位、最后一位、索引位置添加元素getFirst()、getLast()、get(intindex)
根据索引访问元素removeFirst()、removeLast()、remove(intindex)根据索引删除元素set(intindex,Eelement)根据索引修改元素任务5-2乐自助食材备货-集合List接口-LinkedList如例5-11,通过创建、添加、删除等操作演示中LinkedList方法的使用,详见LinkedListDemo.java1importjava.util.LinkedList;2publicclassLinkedListDemo{3publicstaticvoidmain(String[]args){4 LinkedList<String>list=newLinkedList<>();5list.add("混动型汽车");6list.add("纯电型汽车");7list.add("氢燃料电池型汽车");8System.out.println("新集合:"+list);9list.addFirst("新能源汽车");//在列表开头添加元素10System.out.println("在集合头部添加元素后:"+list);11list.removeLast();//移除列表最后一个元素12System.out.println("删除集合最后一个元素后:"+list);13System.out.println("获取指定索引的元素:"+list.get(1));//输出索引为1的元素14}15}任务5-2乐自助食材备货-集合List接口-IteratorIterator是Java集合框架中用于迭代访问(即遍历)集合的接口,因此Iterator对象也被称为迭代器。当使用List(或其他实现了Collection接口的类)时,可以使用iterator()方法获取一个Iterator对象,然后通过该对象的hasNext()和next()方法来遍历集合中的元素任务5-2乐自助食材备货-集合List接口-Iterator如例5-12,通过集合遍历的案例演示Iterator类的使用,详见IteratorDemo.java1importjava.util.*;2publicclassIteratorDemo{3 publicstaticvoidmain(String[]args){4 ArrayList<String>list=newArrayList<>();5 list.add("新能源汽车");6 list.add("燃油型汽车");7 list.add("纯电型汽车");8 list.add("固态电池型汽车");9 list.add("混合动力型汽车");10 //获取迭代器对象11 Iterator<String>iterator=list.iterator();12 while(iterator.hasNext()){13 Stringelement=iterator.next();14 System.out.println(element);15 }16 }17}任务5-2乐自助食材备货-集合List接口-Iterator上述代码中,首先创建一个LinkedList集合并添加相应的元素,演示了使用Iterator类遍历集合。其运行结果如图任务5-2乐自助食材备货-集合Set接口
Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致。Set接口定义了一系列操作无序集合的方法,包括添加、删除、修改和查询元素等。Set接口的实现类包括HashSet、LinkedHashSet和TreeSet任务5-2乐自助食材备货-集合Set接口-HashSetHashSet是Set接口的一个具体实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论