《跨平臺程序設計語言》課件-第5章 數組、字符串和枚舉_第1頁
《跨平臺程序設計語言》課件-第5章 數組、字符串和枚舉_第2頁
《跨平臺程序設計語言》課件-第5章 數組、字符串和枚舉_第3頁
《跨平臺程序設計語言》課件-第5章 數組、字符串和枚舉_第4頁
《跨平臺程序設計語言》課件-第5章 數組、字符串和枚舉_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1.字符串介紹第5章數組、字符串和枚舉什么是字符串字符串:字符串是字符的序列,它是組織字符的基本數據結構,從某種程度上來說有些類似于字符的數組。在Java中,字符串被當作對象來處理,是String類的實例。字符串常量使用雙引號括住的一串字符,比如:Java編譯器自動為每一個字符串常量生成一個String類的實例,因此可以用字符串常量直接初始化一個String對象,如:"Helloworld!"Strings="Helloworld!";創建字符串通過使用String類的構造方法來創建字符串:String共有11個構造方法。常用的幾個是:例如:注意:String類是不可改變的,所以一旦創建了String對象,那它的值就無法改變了publicString(); //創建一個空的字符串publicString(Strings); //用已有字符串創建新的string(最常用)publicString(StringBufferbuf); //用StringBuffer對象的內容初始化新的StringpublicString(charvalue[]); //用已有的字符數組初始化新的stringStrings=newString("Helloworld!");字符串常用方法String類位于java.lang包中,java會默認的導入java.lang包,所以使用java.lang包的類時,不需要顯示的import類,String類具有豐富的方法,其中比較常用的有:在Java中,equals()方法用于比較兩個字符串的內容是否相等,而“==”用于比較兩個字符串的引用是否相等。字符串比較上面的代碼中,s1和s2都是直接賦值的字符串常量,它們的引用指向同一個字符串對象。s3是通過new關鍵字創建的新的字符串對象,它的引用指向一個新的字符串對象。當我們使用equals()方法比較s1和s2、s1和s3時,返回的結果是true,因為它們的內容都相等。當使用“==”比較s1和s2、s1和s3時,s1和s2的引用相等,所以返回true,而s1和s3的引用不相等,所以返回false。Strings1="Hello";Strings2="Hello";Strings3=newString("Hello");

System.out.println(s1.equals(s2)); //trueSystem.out.println(s1.equals(s3)); //trueSystem.out.println(s1==s2); //trueSystem.out.println(s1==s3); //false連接字符串String類提供了連接兩個字符串的方法:返回string2連接string1的新字符串。也可以對字符串常量使用concat()方法,如:更常用的是使用'+'操作符來連接字符串,如:結果如下:string1.concat(string2);"我的名字是".concat("張三");"Hello,"+"world"+"!""Hello,world!"StringBuilder類和StringBuffer類String類對象的長度和內容賦值后是不能被改變的、或者被附加新的子串;盡管可以用“+”的方式把子串附加到String對象的原串中,如在例中的StringtoHexString(byte[]b)方法:publicstaticStringtoHexString(byte[]b){Stringa="[";for(inti=0;i<b.length;i++){Stringhex=Integer.toHexString(b[i]&0xFF);//保留1字節if(hex.length()==1){hex='0'+hex;}a=a+((i==0)?(hex):(","+hex));}a=a+"]";returna.toUpperCase();}程序中字符串對象a初值賦給“[”,每次執行第08行時,又會在原串的基礎上附加新的子串,生成新的對象實例;這種方式能夠正確運行,但是每次執行后會產生新的String對象實例,占用新的存儲空間。類似這種頻繁追加操作,勢必在堆中產生大量的實例;如果大量使用,可能會導致堆空間緊張;此外,每次生成新的對象需要時間,也會影響運行效率;從空間和時間考慮,建議避免使用。StringBuilder類和StringBuffer類在面向對象程序設計時,最好采用能夠重復使用的對象。對于串對象,Java引入兩個可以重復使用的串類,StringBuilder和StringBuffer類。這兩類創建的串對象后,它們的內容允許被改變,也就是說,對象可以重復修改、使用。兩者的區別是:StringBuffer類是線程安全的、而StringBuilder是線程不安全的,因為線程安全是需要犧牲性能的,因此,線程安全者性能較差,線程不安全者則性能較好。所謂“線程安全”,主要體現兩點:第一,在多個線程對同一個實例訪問時不會相互干擾,不會產生沖突;其次,是每個線程有自己的字段,這些不會在多個線程間共享。更深入的理解將在后續多線程章節的課程介紹。StringBuilder類和StringBuffer類StringBuilder():用不帶參數構建StringBuilder對象;StringBuilder(CharSequenceseq):用CharSequence作為參數構建StringBuilder對象;StringBuilder(inti):用int數據作為參數構建StringBuilder對象;StringBuilder(Stringstr):用String對象作為參數構建StringBuilder對象。StringBuilder類的方法見Java的API文檔。StringBuilder類和StringBuffer類的構造方法類似。在這里僅介紹StringBuilder類的構造方法:StringBuilder類和StringBuffer類publicstaticStringtoHexString0(byte[]b){StringBuildera=newStringBuilder("[");//創建一個初值為“[”的StringBuilder對象aStringBuilderhex=newStringBuilder("");//創建一個帶空串的StringBuilder對象hex

for(inti=0;i<b.length;i++){ hex.append((Integer.toHexString(b[i]&0xFF)).toUpperCase());//保留1字節,轉換成大寫字母if(hex.length()==1)hex.insert(0,"0");if(i==0)a.append(hex);//調用a.append()方法追加到hex對象序列的后面elsea.append(","+hex);//調用hex.append()方法追加到hex對象序列的后面hex.delete(0,hex.length());//調用hex.delete()方法把原先hex中的序列全部刪除

}a.append("]");returna.toString();//由于a是StringBuilder類對象,而返回的是String類,把a中序列轉換成String類}應用StringBuilder類,可以重寫上述例中的StringtoHexString(byte[]b)方法,更名為toHexString0(byte[]b),仍然放在StringMethod01.Java源程序中:2.1數組的使用第5章數組、字符串和枚舉什么是數組數組:數組(array)是一種最簡單的復合數據類型,它是有序數據的集合,數組中的每個元素具有相同的數據類型,可以用一個統一的數組名和不同的下標來確定數組中唯一的元素。根據數組的維度,可以將其分為一維數組、二維數組和多維數組等。什么是數組在Java中數組的下標是從零開始的,很多計算機語言的數組下標也從零開始。Java數組下標訪問運算符是中括號,如intArray[0],表示訪問intArray數組的第一個元素,0是第一個元素的下標。Java中的數組本身是引用數據類型,它的長度屬性是length。數組:所有的數組都是由連續的內存位置組成的。最低的地址對應第一個元素,最高的地址對應最后一個元素。Numbers[0]NumBers[1]Numbers[2]Numbers[3]……FirstElementLastElement聲明數組在java中聲明一個數組,可以使用下面的語法:datatype用于指定被存儲在數組中的元素的類型。arrayName指定數組的名稱。示例:注意:Java語言中聲明數組時不能指定其長度(數組中元素的數),例如:inta[5];是錯誤的datatype[]arrayName;或者datatypearrayName[];inta[];int[]b;String[]c;初始化數組聲明一個數組不會在內存中初始化數組。當初始化數組變量時,可以賦值給數組。數組是一個引用類型,所以需要使用new關鍵字來創建數組的實例。動態初始化:數組聲明且為數組元素分配空間與賦值的操作分開進行int[]arr=newint[3];arr[0]=3;arr[1]=6;arr[2]=9;intarr[]=newint[]{3,6,9};//或int[]arr={3,6,9};//定義數組長度為0,數組的長度可以為0int[]a=newint[]{};int[]a={};靜態初始化

:在定義數組的同時就為數組元素分配空間并賦值使用數組聲明并用運算符new為之分配空間后,才可以引用數組中的每個元素數組元素的引用方式:數組名[數組元素下標]數組元素下標可以是整型常量或整型表達式。如a[3],b[i],c[6*i]數組元素下標從0開始;長度為n的數組合法下標取值范圍:0—>n-1,即[0,length)每個數組都有一個屬性length指明它的長度注意:數組一旦初始化,其長度是不可變的使用數組示例:聲明并初始化長度為10的整型數組,遍歷賦值和輸出成績。Scannerinput=newScanner(System.in);//定義長度為10的整型一維數組int[]arr=newint[10];//遍歷輸入成績,索引范圍0~arr.length-1for(inti=0;i<arr.length;i++){arr[i]=input.nextInt();}//遍歷輸出成績,索引范圍0~arr.length-1for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}總結1.一致性:數組只能保存相同數據類型元素,元素的數據類型可以是任何相同的數據類型。2.有序性:數組中的元素是有序的,通過下標訪問。3.不可變性:數組一旦初始化,則長度(數組中元素的個數)不可變。數組特性:在計算機語言中數組是非常重要的集合類型,大部分計算機語言中數組具有如下三個基本特性:總結數組可以是一維數組、二維數組或多維數組。數值數組元素的默認值為0,而引用元素的默認值為null。數組的索引從0開始,如果數組有n個元素,那么數組的索引是從0到(n-1)。數組元素可以是任何類型,包括數組類型。數組類型是從抽象基類Array派生的引用類型。數組特點:2.2數組常用算法第5章數組、字符串和枚舉數組的遍歷在Java中,通常使用循環結構來遍歷數組。常見的循環結構包括for循環和foreach循環。使用for循環遍歷數組for循環適用于已知需要遍歷的次數的情況。以下是使用for循環遍歷數組的示例代碼:在上述代碼中,通過array.length獲取數組的長度,然后使用for循環遍歷數組。循環變量i從0開始遞增,直到i的值等于數組長度減1。for(inti=0;i<array.length;i++){//訪問數組中的元素并進行相應的操作System.out.println(array[i]);}數組的遍歷使用foreach循環遍歷數組foreach循環適用于不需要使用索引值的情況。以下是使用foreach循環遍歷數組的示例代碼:在上述代碼中,通過intnum:array的語法,將數組array中的每個元素賦值給變量num,然后對num進行相應的操作。for(intnum:array){//訪問數組中的元素并進行相應的操作System.out.println(num);}冒泡排序從第一個元素開始,兩兩進行比較,將較大的數往后移,這樣就將最大的數放在了最后。第二輪將第二大的數放在倒數第二個,以次類推,將元素按大小順序排序。原理:冒泡排序練習:已知一組數:{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48},請按從小到大的順序輸出。//聲明初始化數組(靜態初始化)int[]arr={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//兩兩比較,每次得到最大值,并移動到最右邊。//因為最后一次比較得出最后兩個數值的位置,則進行length-1輪比較for(inti=0;i<arr.length-1;i++){for(intj=0;j<arr.length-1-i;j++){//比較當前j索引值與下一個索引(j+1)值的大小if(arr[j]>arr[j+1]){inttemp=arr[j]; //定義臨時變量存儲j索引的值arr[j]=arr[j+1]; //將(j+1)索引的值賦值到j索引元素arr[j+1]=temp; //將臨時變量temp(存儲了j索引的值)賦值到(j+1)索引元素}}}//遍歷輸出數組for(inti=0;i<arr.length;i++)System.out.print(arr[i]+"、");數組查找在Java編程中,數組是一種常用的數據結構,用于存儲一系列相同類型的元素。當我們需要查找數組中的某個元素時,可以使用不同的算法和方法來實現。冒泡排序練習:已知一組數:{1,2,3,4,5},查找輸入目標元素是否存在。//初始化數組int[]array={1,2,3,4,5};Scannerscanner=newScanner(System.in); //創建輸入對象inttarget=scanner.nextInt(); //輸入需要查找的目標元素//遍歷數組booleanfound=false;for(inti=0;i<array.length;i++){if(array[i]==target){found=true;break;}}//返回結果if(found)System.out.println("目標元素找到了!");elseSystem.out.println("目標元素未找到!");二分查找在有序數組中尋找一個元素x,先用數組的中間元素和x比較,如果相等則返回,x小于中間元素的話就在左半區尋找,大于中間元素就在右半區尋找,此時也可以用半區的中間元素進行比較,進一步縮小尋找范圍,直到找到,可以采用遞歸的思想。原理:二分查找利用二分查找返回元素在有序數組中的索引,沒找到則返回-1。publicstaticintgetIndex(int[]arr,intnum){intminIndex=0;intmaxIndex=arr.length-1;intmidIndex=(minIndex+maxIndex)/2;while(minIndex<=maxIndex){if(num==arr[midIndex]){returnmidIndex;}elseif(num>arr[midIndex]){minIndex=midIndex+1;}else{maxIndex=midIndex-1;}midIndex=(maxIndex+minIndex)/2;}return-1;}2.3多維數組第5章數組、字符串和枚舉什么是多維數組在Java中,從數組底層的運行機制來看,其實沒有多維數組。多維數組可以看成以數組為元素的數組。Java中可以有二維、三維、甚至更多維數組,但是實際開發中用的非常少,最多到二維數組。多維數組:二維數組介紹二維數組的本質其實就是一維數組,只不過每個元素又是一個一維數組。在java中聲明一個二位數組,可以使用下面的語法:“[][]”用于表明定義了一個二維數組,通過多個下標進行數據訪問:二維數組的初始化主要分為靜態初始化和動態初始化。datatype[][]arrayName;或者datatypearrayName[][];數組名[數組元素下標][數組元素下標]二維數組:二維數組介紹在創建數組時不直接指定數據元素個數,而是直接將具體的數據內容進行指定。publicclassTest{publicstaticvoidmain(String[]args){int[][]a={{1,2,3},{3,4},{3,5,6,7}};System.out.println(a[2][3]);}}靜態初始化:二維數組介紹在創建數組時不直接指定數據元素個數,而是直接將具體的數據內容進行指定。importjava.util.Arrays;publicclassTest{publicstaticvoidmain(String[]args){int[][]a=newint[3][];//a[0]={1,2,5};//錯誤,沒有聲明類型就初始化a[0]=newint[]{1,2}; a[1]=newint[]{2,2}; a[2]=newint[]{2,2,3,4}; System.out.println(a[2][3]); System.out.println(Arrays.toString(a[0]));System.out.println(Arrays.toString(a[1])); System.out.println(Arrays.toString(a[2]));}}運行結果:動態初始化:二維數組介紹練習:創建一個二維數組存儲兩個班的成績,每班10人,請遍歷賦值和輸出成績。Scannerinput=newScanner(System.in);//定義二維數組int[][]arr=newint[2][10];//遍歷輸入成績,索引范圍0~arr.length-1for(inti=0;i<arr.length;i++){//得到一維數組int[]arr_1=arr[i];//遍歷一維數組,索引范圍0~arr_1.length-1for(intj=0;j<arr_1.length;j++){arr[i][j]=input.nextInt();}}//遍歷輸出成績,索引范圍0~arr.length-1for(inti=0;i<arr.length;i++){//得到一維數組int[]arr_1=arr[i];//遍歷一維數組,索引范圍0~arr_1.length-1for(intj=0;j<arr_1.length;j++){System.out.print(arr[i][j]+"\t");}//換行System.out.print("\n");}實現代碼1實現代碼2Arrays類的使用JDK中提供了一個專門用于操作數組的工具類,即Arrays類,位于java.util包中。Arrays類的使用Arrays類提供了一些列方法來操作數組,如排序、復制、比較、填充等,用戶直接調用這些方法即可不需要自己編碼實現,降低了開發難度。java.util.Arrays是一個與數組相關的工具類,里面提供了大量靜態方法,用來事項數組常見的操作。Arrays類的使用3.枚舉介紹第5章數組、字符串和枚舉什么是枚舉Java枚舉(Enum)是一種特殊的數據類型,它是一組預定義的常量,每個常量都有一個名稱和一個值。枚舉類型在Java中被廣泛使用,它可以用來代替常量、標志位、狀態碼等,使代碼更加清晰、易讀和易維護。在日常生活中,經常遇到一些數據,如一個星期只有7天、一年有12個月、交叉路口的信號燈只有紅綠黃3中顏色等等,這些數據被稱為可枚舉數據。枚舉:枚舉的使用在Java中,可以通過關鍵字enum來定義枚舉類型。枚舉類型的定義格式如下:其中EnumName是枚舉類型的名稱Constant1、Constant2、Constant3等是枚舉類型的常量。每個枚舉常量都有一個名稱和一個值,枚舉常量的名稱通常采用大寫字母命名,多個單詞之間用下劃線分隔。enumEnumName{Constant1,Constant2,Constant3,...}定義枚舉類型:枚舉的使用例如:可以定義一個月份的Month枚舉類:例如:定義一個星期的Weekday枚舉類:publicenumMonth{//索引值January,February,March,April,May,June,July,August,September,October,November,December}publicenumWeekday{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday;}定義枚舉類型:訪問枚舉常量:枚舉的使用在Java中,可以通過枚舉類型的名稱來訪問枚舉常量。例如,一年四個季節Season枚舉,可以通過如下方式來訪問枚舉常量:Weekday.Monday表示Weekday枚舉類型中的Monday常量。Weekdaymonday=Weekday.Monday;枚舉的使用枚舉類型可以定義方法,這些方法可以在枚舉常量上調用。例如,可以在Weekday枚舉類型中定義一個isWeekend方法來判斷當前枚舉常量是否為周末:在上面的例子中,通過在枚舉常量后面定義方法,可以在每個枚舉常量上調用這個方法。例如,可以通過Weekday.Saturday.isWeekend()來判斷Saturday是否為周末。enumWeekday{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday;

publicbooleanisWeekend(){returnthis==Saturday||this==Sunday;}}枚舉方法:枚舉的使用枚舉類型也可以定義構造器,這些構造器只能在枚舉常量的定義中被調用,并且只能用來初始化枚舉常量的值。例如,可以在Weekday枚舉類型中定義一個帶參數的構造器來設置枚舉常量的值:enumWeekday{Monday("星期一"),Tuesday("星期二"),Wednesday("星期三"),Thursday("星期四"),Friday("星期五"),Saturday("星期六"),Sunday("星期日");

privateStringvalue;privateWeekday(Stringvalue){this.value=value;}publicStringgetValue(){returnvalue;}}枚舉構造器:枚舉的使用例如,可以在Weekday枚舉類型中定義一個帶參數的構造器來設置枚舉常量的值:在上面的例子中,通過在枚舉常量后面定義構造器,可以在枚舉常量的定義中為枚舉常量設置值。例如,可以通過Weekday.Monday.getValue()來獲取Monday的值。枚舉構造器:enumWeekday{Monday("星期一"),Tuesday("星期二"),Wednesday("星期三"),Thursday("星期四"),Friday("星期五"),Saturday("星期六"),Sunday("星期日");

privateStringvalue;privateWeekday(Stringvalue){this.value=value;}publicStringgetValue(){returnvalue;}}枚舉的練習練習:假設我們有一個游戲,游戲中有三個角色:戰士、法師和牧師。每個角色都有自己的屬性:血量、攻擊力和防御力。可以使用枚舉類型來表示這三個角色。枚舉的練習publicenumRole{WARRIOR("戰士",100,50,30), //枚舉常量:WARRIOR

MAGE("法師",80,70,20), //枚舉常量:MAGE

PRIEST("牧師",60,30,50); //枚舉常量:PRIEST

privateStringname;

//角色名稱privateinthp;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論