




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章數(shù)組與字符串在程序設計中,數(shù)組類型是一種表示數(shù)據集合的常用手段,字符串是一種表示姓名、提示信息等類似數(shù)據的常見形式。在Java語言中,為數(shù)組類型與字符串都定義了相應的標準類,Arrays是實現(xiàn)數(shù)組類型的組織與操作的類,String是實現(xiàn)字符串存儲與操作的類。這樣既體現(xiàn)了Java面向對象的完整性,又增強了這兩種數(shù)據的操作能力,為簡化程序設計過程,提高程序的可靠性提供了可能性。
3.1數(shù)組類型根據數(shù)據類型的構成方式不同,可以將所有的數(shù)據類型分成兩個類別:簡單數(shù)據類型和復合數(shù)據類型。所謂簡單是指用于組織單值數(shù)據的數(shù)據類型;所謂復合是指組織數(shù)據集合的數(shù)據類型.由惟一確定某個數(shù)組元素所需要的下標個數(shù)可以將數(shù)組分為一維數(shù)組、二維數(shù)組及多維數(shù)組。
3.1.1一維數(shù)組所謂一維數(shù)組是指每個元素由一個下標值惟一確定的數(shù)組類型。這是一種使用十分頻繁的數(shù)據類型,它的特征明顯、操作方便、易于理解,是每個程序設計者在編寫程序的過程中無法回避使用的一種數(shù)據類型。1.一維數(shù)組的定義定義數(shù)組型變量的語法格式為: 數(shù)組元素類型[]數(shù)組型變量名;或者數(shù)組元素類型數(shù)組型變量名[];“數(shù)組元素類型”為組成一維數(shù)組的元素類型,“數(shù)組型變量名”為定義的數(shù)組型變量名稱,它應該符合Java語言的標識符命名規(guī)則,建議遵守Java語言的標識符命名規(guī)范。
int[]intArray;或者intintArray[];float[]floatArray;或者floatfloatArray[];String[]stringArray;或者StringstringArray[];建議使用前一種格式風格,這種格式風格的好處是將數(shù)據類型集中表示,即前面是數(shù)據類型,后面是變量名稱,而后面一種格式風格的數(shù)據類型被變量名稱分隔為前后兩個部分。Java語言保留這種定義格式風格完全是為了尊重人們的使用習慣。2.一維數(shù)組的創(chuàng)建一個數(shù)組可以包含多個元素,所含的元素數(shù)目被稱為數(shù)組的長度,數(shù)組中也可以沒有任何元素,此時稱為空數(shù)組。正因為如此,在創(chuàng)建數(shù)組時需要給出組成數(shù)組的元素數(shù)目。下面是利用new運算符創(chuàng)建數(shù)組的語法格式:new數(shù)組元素類型[數(shù)組元素數(shù)目];“數(shù)組元素類型”為組成數(shù)組的元素類型,“數(shù)組元素數(shù)目”為組成數(shù)組的元素數(shù)目,這個值要求大于或等于零。
intArray由100個int類型的元素組成intArray=newint[100];floatArray由50個float類型的元素組成floatArray=newfloat[50];stringArray由10個String類型的元素組成stringArray=newString[10];也可以將數(shù)組的定義與創(chuàng)建合并char[]name=newchar[30];doubledoubleData[]=newdouble[10];0123426272829name0123456789doubleData3.一維數(shù)組的初始化在創(chuàng)建數(shù)組的同時,為數(shù)組元素賦予初始值的過程被稱為數(shù)組的初始化。int[]intArray={10,20,30,40,50,60,70,80,90,100};操作過程:首先為intArray數(shù)組分配10個int型元素所需要占用的存儲空間,然后將初始值10,20,30,40,50,60,70,80,90,100依次賦給intArray[0]~intArray[9]。3.一維數(shù)組的初始化String[]name={"zhang","wang","li","zhao"};由于在Java語言中字符串屬于String類對象,所以這條語句的操作過程會稍復雜一些。首先,要為4個String型引用分配存儲空間,然后再根據4個初始值為4個字符串分配存儲空間,最后將初始值"zhang","wang","li","zhao"的引用依次賦給name[0]~name[3]。4.一維數(shù)組元素的訪問創(chuàng)建數(shù)組后,就可以通過引用訪問數(shù)組元素以達到對數(shù)組操作的目的。Java訪問數(shù)組元素的格式為:arrayName[下標表達式]
在運行程序時,Java語言會嚴格地檢查每個“下標表達式”的取值范圍,一旦發(fā)生越界就會拋出ArrayIndexOutOfBoundsException異常。當需要對數(shù)組中的每個元素進行操作時,可以利用數(shù)組對象中封裝的length屬性獲得當前數(shù)組中包含的元素數(shù)目。intvalue[]={10,9,40,20,12,8,9};for(inti=0,sum=0;i<value.length;i++){
sum+=value[i];}在for語句中,將循環(huán)上界設定為value.length的好處是:當value數(shù)組的長度發(fā)生變化時不需要修改程序的其他地方。在JDK5.0版本中增加了一個專門用于操作數(shù)據集合的循環(huán)流程控制語句foreach,其功能更加強大、書寫更加簡潔。這種語句的書寫格式為:for(數(shù)組元素型變量:數(shù)組型變量)語句;“數(shù)組元素型變量”是與數(shù)組元素同類型的變量,“數(shù)組型變量”是一個表示數(shù)組引用的變量。例如,可以將上述數(shù)組元素累加的程序段改寫成:intsum=0;for(intv:value){ sum+=v;}這條語句的執(zhí)行過程可以描述為:循環(huán)訪問value數(shù)組中的每個元素并將其內容累加到變量sum中。5.一維數(shù)組的復制在Java語言中,數(shù)組型變量可以實現(xiàn)兩種形式的復制操作。第一種復制操作被稱為數(shù)組引用的復制int[]firstArray={10,20,30,40,50,60};int[]secondArray;secondArray=firstArray;這條賦值語句的執(zhí)行效果是將firstArray的引用信息賦給secondArray,此時firstArray與secondArray共同引用一個數(shù)組。arraycopy是System類中的一個靜態(tài)方法。定義格式為:voidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)其中,src為被拷貝的原始數(shù)組,srcPos為原始數(shù)組中將要拷貝的數(shù)組元素的起始位置,dest為目標數(shù)組,destPos為拷貝到目標數(shù)組中后放置數(shù)組元素的起始位置,length為拷貝的數(shù)組元素數(shù)目。int[]arraySrc={5,10,15,20,25,30,35,40,45,50};int[]arrayDest=newint[10];執(zhí)行語句:System.arraycopy(arraySrc,0,arrayDest,0,10);舉例:假設有n個候選人參加學生會主席的競選,最后將根據學生的投票情況決定學生會主席的獲勝人選。編寫一個程序,完成選票的統(tǒng)計工作,并顯示最終的獲勝者。分析:為了利用程序解決這個問題,假設為每位候選人編號1...n。如果希望為某位候選人投票時,只需要從鍵盤上輸入這位候選人的編號即可。每位候選人所獲的選票的存儲在一個含有n個元素的一維數(shù)組中。由于含有n個元素的一維數(shù)組的下標范圍在0...n-1之間,所以,在程序實現(xiàn)中,需要將候選人的編號與數(shù)組元素的下標做一個映射,即1號候選人在數(shù)組中用下標0表示,2號候選人在數(shù)組中用下標1表示,依此類推,n號候選人在數(shù)組中用下標n-1表示。
在Java語言中,一維數(shù)組的元素可以屬于任意類型,包括基本數(shù)據類型和引用數(shù)據類型。也就是說,一維數(shù)組的元素又可以是一維數(shù)組類型,這就支持了二維數(shù)組,乃至多維數(shù)組的概念。由于可以借助于二維數(shù)組表示具有二維關系的數(shù)據,所以它的應用十分廣泛。3.1.2二維數(shù)組1.二維數(shù)組的定義與創(chuàng)建Java語言規(guī)定,二維數(shù)組的定義格式為:數(shù)組元素類型[][]數(shù)組型變量名;或者數(shù)組元素類型數(shù)組型變量名[][];或者數(shù)組元素類型[]數(shù)組型變量名[];“數(shù)組元素類型”為二維數(shù)組的元素類型,“數(shù)組型變量名”為二維數(shù)組型變量名稱。int[][]intArray;floatfloatArray[][];double[]doubleArray[];在這3種定義格式中,建議使用第一種格式。第二種格式完全是為了尊重那些習慣使用C/C++定義格式的人們而保留的,第三種格式清晰度較差,不提倡使用。創(chuàng)建二維數(shù)組的格式為:new數(shù)組元素類型[行數(shù)][列數(shù)];其中,“數(shù)組元素類型”為二維數(shù)組元素的類型,“行數(shù)”與“列數(shù)”表明了陳列在行方向與列方向的元素數(shù)量。例如,intArray=newint[10][5];floatArray=newfloat[3][4];int[][]intArray=newint[10][5];等價于:intArray=newint[10][];for(inti=0;i<10;i++){intArray[i]=newint[5];}每行元素個數(shù)不同floatArray=newfloat[5][];for(inti=0;i<5;i++){floatArray[i]=newfloat[i+1];}2.二維數(shù)組的初始化int[][]intArray={{1,2,3,4},{5,6,7,8},{9,10,11,12}};執(zhí)行效果:首先創(chuàng)建二維數(shù)組,然后,將第1個括號中的3個數(shù)值分別賦給第1行的3個元素;再將第2個括號中的3個數(shù)值分別賦給第2行的3個元素;最后將第3個括號中的3個數(shù)值分別賦給第3行的3個元素。初始化后的數(shù)組元素狀態(tài)為:3.二維數(shù)組元素的訪問創(chuàng)建二維數(shù)組之后,可以通過引用型的二維數(shù)組變量對數(shù)組元素進行操作了。二維數(shù)組必須用兩個下標惟一地確定元素,第一個下標為行下標,第二個下標為列下標,下標的起始編號從0開始。intintArray[]=newint[5][4];
舉例:利用二維數(shù)組表示矩陣,并實現(xiàn)兩個矩陣相乘的操作。矩陣可以用來表示統(tǒng)計數(shù)據等方面的各種有關聯(lián)的數(shù)據。在數(shù)學上,矩陣可以是由方程組的系數(shù)及常數(shù)構成的方陣。下面給出一個方程組與之對應的矩陣表示。在矩陣的運算中,要求兩個相乘的矩陣必須滿足第1個矩陣的列數(shù)等于第2個矩陣的行數(shù)。即對于Am1×n1和Bm2×n2,要求n1=m2,且結果矩陣C的行列數(shù)為m1×n2,其中的每個元素內容為publicstaticvoidenterMatrix(int[][]m,introw,intcol){//輸入矩陣
for(inti=0;i<row;i++){for(intj=0;j<col;j++){m[i][j]=(int)Math.round(Math.random()*10);}}}publicstaticvoidprintMatrix(int[][]m,introw,intcol){//顯示矩陣
System.out.println();for(inti=0;i<row;i++){for(intj=0;j<col;j++){System.out.printf("%4d",m[i][j]);}System.out.println();}System.out.println();}publicstaticvoidMulMatrix(int[][]a,introw1,intcol1,int[][]b,introw2,intcol2,int[][]c){//兩個矩陣相乘for(inti=0;i<row1;i++){for(intj=0;j<col2;j++){c[i][j]=0;for(intk=0;k<col1;k++){c[i][j]+=a[i][k]*b[k][j];}}}}3.2字符串與String類在Java語言中提供了兩種字符串:一類是String標準類實現(xiàn)的字符串常量;另一類是StringBuffer標準類實現(xiàn)的可編輯修改的字符串。與C語言一樣,Java語言中的字符串直接量使用雙引號將字符序列括在其中。"thisisastringliteral!"這樣書寫的直接量將屬于String類。除了直接書寫字符串直接量以外,還可以將某個字符串存儲在String的類對象中。由于String類提供了很多對字符串常量操作的成員方法,所以,這樣做既便于字符串的重復利用,又可以提高應用字符串的控制能力。String類被定義在java.lang包中。使用String類表示字符串需要經過定義、創(chuàng)建、初始化和訪問幾個階段。定義一個String類對象的語法格式為:String字符串變量名;其中,String為類名,
“字符串變量名”為對象名。
需要注意,這里定義的字符串對象只是一個引用型變量,需要按照下列格式創(chuàng)建及初始化對象。字符串變量名=字符串值;或字符串變量名=newString(字符串值);“字符串變量名”為引用型的String類對象,“字符串值”為字符串直接量或另外一個引用型的String類對象。Stringstr1,str2,str3;str1="Thisisastring";str2=newString("Thisisastring");str3=str1;在使用Sting類對象時需要注意幾點:在Java語言中,字符串直接量中的每個字符使用Unicode編碼,占用兩個字節(jié)。如果定義String類對象之后,沒有引用任何一個字符串,就應該賦予null。String類對象所引用的字符串是常量,不能對其字符串內容進行修改。String類提供了很多成員方法,可以通過這些方法更方便、靈活地使用字符串。
舉例:判斷給定的字符串是否為回文字符串。所謂回文字符串是指將字符串逆置后與原字符串相同。例如,“ABCDCBA”逆置后還是“ABCDCBA”,這是一個回文字符串;但“Program”逆置后為“margorP”,與原字符串不相同,這不是回文字符串。
publicstaticbooleanisPalindrome(Stringstr){//判斷str是否為回文字符串
intlen=str.length();//返回字符串長度
for(intindex=0;index<len/2-1;index++){if(str.charAt(index)!=str.charAt(len-index-1)){//對稱的兩個字符比較
returnfalse;}}returntrue;}3.3數(shù)組操作與Arrays類應用Arrays是Java類庫提供的一個位于java.util包中的標準類,其中包含了許多靜態(tài)成員方法,通過它們可以方便地對數(shù)組進行排序、比較與填充等一系列操作,由于這些成員方法都是經過精心設計、嚴格檢測,所以,這樣不但可以大大地減輕程序設計人員的負擔,還可以提高程序的質量、增加程序的清晰度與優(yōu)化程序的執(zhí)行效率。3.4綜合應用舉例舉例:隨機產生若干個整數(shù),并采用選擇排序的算法,按照從大到小重新進行排列。問題分析:這是一的典型的一維數(shù)組問題。為了展示一維數(shù)組的操作方式,在這個實例中,自定義選擇排序的成員方法。設計說明:設計三個成員方法,一個用于生成一維數(shù)組的內容;一個用于顯示一維數(shù)組的內容;另一個用于實現(xiàn)選擇排序算法。由于在排序過程中,隨時需要查看或操作每個整數(shù),所以,利用一維數(shù)組將參加排序的所有整數(shù)保存起來是一種最直接且簡易的方法。
publicstaticvoidsort(int[]data){//選擇排序
intindex;for(inti=0;i<data.length-1;i++){//執(zhí)行n-1趟選擇操作
index=i;for(intj=i+1;j<data.length;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2 回延安2024-2025學年八年級下冊語文同步教學設計(統(tǒng)編版)
- 4不做“小馬虎”(教學設計)-2023-2024學年道德與法治一年級下冊統(tǒng)編版
- 商業(yè)合作合同示范文本
- 2-1《立在地球邊上放號》教學設計 2024-2025學年統(tǒng)編版高中語文必修上冊
- 2025年電商大數(shù)據項目合作計劃書
- 果山租賃合同范本
- 廠房加固合同范本
- 鏈家自如合同范本
- 8古詩二首 登鸛雀樓 教學設計-2024-2025學年語文二年級上冊統(tǒng)編版
- 汽配產品合同范本
- 滬教版四年級數(shù)學下冊全冊完整課件
- 工作室成員成長檔案模板(內部版)課件
- (完整版)馬克思主義基本原理概論知識點
- 弱電系統(tǒng)巡查記錄表(辦公樓)
- 預防接種人員崗位培訓習題(Ⅰ類培訓練習題庫共385題)
- 現(xiàn)場經濟簽證單范本
- 《跨境電商B2B操作實務》教學大綱
- 河口區(qū)自然資源
- 精益改善項目管理制度
- 2012數(shù)據結構英文試卷A及答案
- 機翼結構(課堂PPT)
評論
0/150
提交評論