




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章數組和字符串
學習目標理解數組的概念,能夠聲明一維數組和二維數組,能夠使用靜態和動態兩種方式初始化數組元素。能夠編寫訪問數組元素的程序理解字符串的概念,能夠定義字符串,并進行初始化。能進行字符串與基本數據類型之間的轉換,能使用String類和StringBuffer類中的方法對字符串進行相關的操作理解向量的概念,掌握向量的定義及使用方法,能正確完成向量元素的添加、刪除、修改及查找等操作本章主要內容數組12Vector類3字符串類型第一節數組數組聲明數組是相同數據類型的元素按一定順序排列的數據序列數組是一系列的匿名變量,數組中的元素可通過下標來訪問在Java中,數組是對象。類Object中定義的方法都可以用于數組對象。可以說明任何類型的數組,基本類型,類類型,數組等。數組在使用之前必須先說明一維數組的定義類型
數組名[];
變量名后接方括號;將方括號放到變量名的左面。如下所示:
chars[];
intintArray[];
DatedateArray[];
Pointpoints[];類型[]數組名;創建數組
靜態初始化和動態初始化
靜態初始化就是在定義數組的同時對數組元素進行初始化
靜態初始化可用于任何元素類型,初值塊中每個位置的每個元素對應一個引用。動態初始化是使用運算符new為數組分配空間。數組說明的方括號中的數字表示數組元素個數靜態初始化intintArray[]={1,2,3,4};int[]ages={34,12,45};double[]heights={84.124,78.2,61.5};boolean[]tired={true,false,false,true};String[]names={“Zhang",“Li",“Wang"};動態初始化類型數組名[]=new類型[數組大小];類型[]數組名=new類型[數組大小];s=newchar[20];類類型的數組
類類型的數組需要經過兩步進行空間分配
使用運算符new只是為數組本身分配空間,并沒有對數組的元素進行初始化
第一步先創建數組本身:typearrayName[]=newtype[arraySize];
第二步分別創建各個數組元素: arrayName[0]=newtype(paramList); … arrayName[arraySize-1]=newtype(paramList);類類型的數組points=newPoint[100];
points[0]=newPoint();
points[1]=newPoint();
…
points[99]=newPoint();
stringstringArrar[];stringArray=newString[3];stringArray[0]=newString(“how”);stringArray[1]=newString(“are”);Java中沒有靜態的數組定義,內存都是通過new動態分配的。錯誤的定義:intintArray[5];數組說明與創建關系
Point類
classPoint{ intx,y; Point(intx1,inty1){ x=x1; y=y1; } Point(){ this(0,0); }}數組說明與創建關系points(a)pointslength:100…(b)points…length:100X:Y:(c)Point[]points;執行完畢,系統為變量points分配一個引用空間points=newPoint[100];執行完畢,系統在內存中分配一個數組對象并把數組引用賦給變量pointspoints[1]=newPoint();
數組說明注意數組變量的類型可以指向它的父類正確錯誤Object[]points;points=newPoint[100];Point[]points;points=newObject[100];數組邊界
數組下標從0開始,元素個數length是數組類中唯一的數據成員變量
new創建數組時系統自動給length賦值數組一旦創建完畢,其大小就固定下來程序運行時可以使用length進行數組邊界檢查。如果發生越界訪問,則拋出一個異常訪問數組元素intlist[]=newint[10];
for(inti=0;i<list.length;i++){
//進行相應處理的代碼
}循環的結束條件中使用list.length,而不是常數10。這樣做不會引起數組下標越界,使程序更健壯,修改更方便。數組元素的引用
數組名加上下標,引用方式為:index為數組下標,下標從0開始,一直到length-1下標是整型常數或表達式程序5.1設給定一組整型數,求它們的平均值及最大值arrayName[index]
arrayName[1],arrayName[i],arrayName[6*i]多維數組多維數組的定義Java中沒有真正的多維數組,可以建立數組的數組(的數組……),由此得到多維數組n維數組是n-1維數組的數組說明多維數組時使用類型及多對方括號二維數組二維數組的定義方式:與一維數組一樣,定義對數組元素也沒有分配內存空間,要使用運算符new來分配內存,然后才可以訪問每個元素類型數組名[][];類型[][]數組名;類型[]數組名[];多維數組的初始化靜態初始化在定義數組的同時為數組分配空間動態初始化直接為每一維分配空間從最高維起(而且必須從最高維開始),分別為每一維分配內存intintArray[][]={{2,3},{1,5},{3,4}};
數組intArray為一個3行2列的數組,它的形式如下:
23 15 34類型數組名[][]=new類型[數組第1維大小][];數組名[0]=new類型[數組第2維大小];數組名[1]=new類型[數組第2維大小];......數組名[數組第一維大小-1]=new類型[數組第2維大小];類型數組名[][]=new類型[數組第一維大小][數組第二維大小]例如:inta[][]=newint[2][3];
二維數組例一inttwoDim[][]=newint[4][]; twoDim[0]=newint[5];twoDim[1]=newint[5];二維數組例二Strings[][]=newString[2][];s[0]=newString[2];s[1]=newString[3];s[0][0]=newString(“Good”);s[0][1]=newString(“Luck”);s[1][0]=newString(“to”);s[1][1]=newString(“you”);s[1][2]=newString(“!”);非矩陣數組inttwoDim[][]=newint[4][];
twoDim[0]=newint[2];
twoDim[1]=newint[4];
twoDim[2]=newint[6];
twoDim[3]=newint[8];XXXXXXXXXXXX
XXXXXXXXtwoDim數組為4行,每行的元素個數分別為2,4,6,8個矩陣數組二維矩陣數組的一般說明格式為:arrayName是數組名,length1和length2分別為數組各維的大小,type是數組元素的類型。
類型數組名[][]=new類型[數組第一維大小][數組第二維大小]二維矩陣數組intmatrix[][]=newint[4][5];將創建一個有4個一維數組的數組,每個一維數組中又有5個整數,即4行5列的整數矩陣。該行等價于下列這段代碼:intmatrix[][]=newint[4][];for(intj=0;j<matrix.length;j++) matrix[j]=newint[5];多維數組說明正確的聲明:inta1[][]=newint[2][3];inta2[][]=newint[2][];int[]a3[]=newint[4][6];錯誤的說明:interrarr1[2][3];interrarr2[][]=newint[][4];interrarr3[][4]=newint[3][4];不允許說明靜態數組
說明順序應從高維到低維
數組維數的指定只能出現在new運算符之后
多維數組的引用
二維數組引用方式為:數組名[第1維下標][第2維下標]例如:
intmyTable[][]=newint[4][3];
myTable[0][0]=34;
myTable[0][1]=15;
myTable[0][2]=26;多維數組的引用例intmyTable[][]={ {23,45,65,34,21,67,78}, {46,14,18,46,98,63,88}, {98,81,64,90,21,14,23}, {54,43,55,76,22,43,33}};for(introw=0;row<4;row++){ for(intcol=0;col<7;col++) System.out.print(myTable[row][col]+""); System.out.println();}0123456023456534216778146141846986388298816490211423354435576224333多維數組的引用例計算表中各行元素之和并查找其值最大的那個行程序5.2
結果:Row2hastheMAXsumof391length屬性
多維數組的length屬性只返回第一維的長度
intages[4][7];ages.length; //返回4,而不是28
可以分別存取每一維的長度,如:
int[][]ages=intages[4][7]; int[]firstArray=ages[0]; ages.length*firstArray.length; //返回28數組復制
Java方法arraycopy()
//程序5.3classArrayTest{publicstaticvoidmain(Stringargs[]){ intelements[]={1,2,3,4,5,6}; inthold[]={10,9,8,7,6,5,4,3,2,1}; System.arraycopy(elements,1,hold,2,4); }}第二節字符串類型
字符串
內存中連續排列的一個或多個字符String
處理不變字符串StringBuffer處理可變字符串字符串的聲明字符串常量系統為程序中出現的字符串常量自動創建一個String對象
字符串變量
System.out.println(“ThisisaString”);將創建“ThisisaString”對象Strings1;StringBuffersb1;Strings1=newString();charchars[]={'a','b','c'};Strings2=newString(chars);Strings3="HelloWorld!";
字符串處理String類length()
返回字符串中的字符個數charAt(intindex)
返回字符串中index位置的字符toLowerCase()
將當前字符串中所有字符轉換為小寫形式字符串處理String類toUpperCase()將當前字符串中所有字符轉換為大寫形式subString(intbeginIndex)
當前字符串中從beginIndex開始到末尾的子串replace(charoldChar,charnewChar)
將當前字符串中出現的所有oldChar轉換為newChar程序5.4結果:beforechanged,s=ThisisatestString!afterchanged,s=ThisisatestString!t=thisisateststring!s.length=22strb.length=22s3.replace=ThisisotestString!strb.replace=ThatisatestString!strb.capacity=38字符串處理例StringBuffer類修改一個StringBuffer類的字符串時,不用再創建一個新的字符串對象,而是直接操作原字符串分配內存時,除去字符所占空間外,再另加16個字符大小的緩沖區StringBuffer的長度是指存儲在其中的字符個數,容量是指緩沖所能容納的最大字符數String類對象使用concat(Stringstr)方法將str連接在當前字符串的尾部
重載運算符“+”StringBuffer類對象使用append()方法實現連接
Strings=newStringBuffer("Heis").append(age).append("yearsold.").toString();連接Strings="Heis"+age+"yearsold.";
Strings="Thisisthe";Stringt=s.concat("String.");t的內容為:"ThisistheString."比較
可用方法使用關系運算符“==”
與equals()方法不同的是,“==”判定兩字符串對象是否是同一實例,即它們在內存中的存儲空間是否相同
compareTo()、equals()、equalsIgnoreCase()、regionMatches()比較例子程序5.5第三節Vector類對應于類似數組的順序存儲的數據結構,允許不同類型的元素共存于一個變長數組中,可以看作是把不同類型元素按照動態數組進行處理可以看作是一個可變大小的數組
用一個整數類型的次序值來訪問
增加或刪除了元素,大小也變大或變小
概述
適合情況需要處理的對象數目不定,序列中的元素都是對象或可以表示為對象;需要將不同類的對象組合成一個數據序列;需要做頻繁的對象序列中元素的插入和刪除;經常需要定位序列中的對象和其他查找操作;在不同的類之間傳遞大量的數據;
Vector類addElement(Objectobj):將新元素obj添加到序列尾部。insertElementAt(Objectobj,intindex):將指定對象obj插入到指定位置index處。add(intindex,Objectobj):在向量的指定位置index插入指定的元素obj。removeAllElements():清除向量序列中的所有元素,同時向量的大小置為0。Vector類setElementAt(Objectobj,intindex):將向量序列index位置處的對象元素修改為obj。如果下標index是負數或超出實際元素的個數,則拋出異常ArrayIndexOutOfBoundsException。removeElement(Objectobj):刪除向量序列中第一個與指定的obj對象相同的元素,同時將后面的所有元素均前移一個位置。這個方法返回的是一個布爾值,表示刪除操作成功與否。removeElementAt(intindex):刪除index位置的元素,同時將后面的所有元素均前移一個位置。如果下標index是負數或超出實際元素的個數,則拋出異常ArrayIndexOutOfBoundsException。Vector類elementAt(intindex):返回指定位置處的元素。如果下標index是負數或超出實際元素的個數,則拋出異常ArrayIndexOutOfBoundsException。這個方法的返回值是Object類型的對象,在使用之前通常需要進行強制類型轉換,將返回的對象引用轉換成Object類的某個具體子類的對象。contains(Objectobj):檢查向量序列中是否包含指定的對象元素obj。indexOf(Objectobj,intstart_index):從指定的start_index位置開始向后搜索,返回所找到的第一個與指定對象obj相同的元素的下標位置。若指定的對象不存在,則返回-1。lastIndexOf(Objectobj,intstart_index):從指定的start_index位置開始向前搜索,返回所找到的第一個與指定對象obj相同的元素的下標位置。若指定的對象不存在,則返回-1。Vector構造方法publi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省南通市通州區2025年初三下學期月考二語文試題含解析
- 工業互聯網平臺安全多方計算技術在2025年工業互聯網安全風險防范與應對報告
- 建設安全文化2025年安全工程師考試試題及答案
- 綜合部人員筆試題及答案
- 環境工程原理試題及答案
- 考古遺址面試題及答案
- 物理實驗相關試題及答案2025年
- 普通土壤學試題及答案
- 安全工程師考試主題總結與回顧2025年試題及答案
- 未來汽車技術展望研究考題試題及答案
- 停車場物業管理工作流程圖
- TD/T 1060-2021 自然資源分等定級通則(正式版)
- 成都青羊小升初5+4考試習題真題
- (正式版)JBT 14582-2024 分戶減壓閥
- 演唱會安保方案及應急預案
- 《新聞評論》課件 第四章 新聞評論的基本類型
- 《齒輪介紹》課件
- 民營醫院分析報告
- 知心慧學提分寶-數學
- 吉祥航空飛行報告
- 《曼陀羅繪畫療愈-初三減壓》PPT
評論
0/150
提交評論