java程序設計任務式教程 課件 5-面向對象編程進階_第1頁
java程序設計任務式教程 課件 5-面向對象編程進階_第2頁
java程序設計任務式教程 課件 5-面向對象編程進階_第3頁
java程序設計任務式教程 課件 5-面向對象編程進階_第4頁
java程序設計任務式教程 課件 5-面向對象編程進階_第5頁
已閱讀5頁,還剩112頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

提交評論