第7章、字符串數(shù)組授課_第1頁
第7章、字符串數(shù)組授課_第2頁
第7章、字符串數(shù)組授課_第3頁
第7章、字符串數(shù)組授課_第4頁
第7章、字符串數(shù)組授課_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

學習導(dǎo)讀字符、字符串、數(shù)組都是使用Java語言編制程序要經(jīng)常使用的數(shù)據(jù)結(jié)構(gòu),因此,熟練掌握這些數(shù)據(jù)結(jié)構(gòu)是進一步學習Java程序設(shè)計的必要階段。通過本章的學習,應(yīng)該能夠熟練掌握字符、字符串、數(shù)組的各種基本操作。第7章字符、字符串、數(shù)組IntroducingArraysDeclaringArrays,CreatingArrays,andInitializingArraysArrayofObjectsCopyingArraysMultidimensionalArraysNumericWrapperClassesCommand-LineParametersCreatingGenericClassesTheVectorClass第7章字符、字符串、數(shù)組教學重點與難點:字符與字符串的區(qū)別字符串常量與String類字符串變量與StringBuffer類數(shù)組與數(shù)組類Arrays7.1字符

字符是指用單引號括起來單個字符,如’a’、’b’、’A’等。這里的字符不是指占1個字節(jié)的ASCII字符,而是指占2個字節(jié)的Unicode字符。因為Unicode被設(shè)計用來處理現(xiàn)在世界上所有書面語言中的字符,所以一個漢字也是被當作一個字符來處理的。對于單個字符,除了有char這個原始類型以外,Java平臺中的java.lang包還專門提供了一個Character類來進行儲存和操作。

7.1.1Character類的構(gòu)造函數(shù)

Character類只能用于存儲和操作單一的字符數(shù)值,Character類的對象包含了單一字符數(shù)值。以下是Character類提供的構(gòu)造函數(shù):

publicCharacter(char)參數(shù)必須為一個char類型數(shù)據(jù),它創(chuàng)建了一個Character對象,該對象包含了由參數(shù)提供的數(shù)值。一旦Character對象被創(chuàng)建,它包含的數(shù)值就不能改變。下面的語句將創(chuàng)建一個Character對象a,該對象包含字符數(shù)據(jù)’b’:

Charactera=newCharacter('b');7.1.2Character類提供的常用方法

1.publicintcompareTo(Character)

compareTo(Character)是一個實例方法,參數(shù)必須為一個Character對象,而不能是char類型數(shù)據(jù)。該方法比較兩個Character對象包含的數(shù)值,返回一個整數(shù)表明在當前對象中的數(shù)值是否大于、等于或者小于參數(shù)給定的數(shù)值。

2.publicbooleanequals(Objectobj)

equals()是一個實例方法,用于比較兩個對象。用于Character類對象時,該方法比較當前對象容納的數(shù)值和參數(shù)對象容納的數(shù)值。在兩個對象容納的數(shù)值相等的時候返回true,否則返回false。

3.publicStringtoString()所有的類從對象類繼承了toString方法。toString是一個實例方法,它將對象轉(zhuǎn)換為字符串。該方法用于Character類對象時,結(jié)果的字符串在長度為1,并且它包含了有這個Character對象容納的數(shù)值。4.publiccharcharValue()

charValue是一個實例方法,它返回Character對象的字符。5.publicstaticbooleanisUpperCase(char)

isUpperCase(char)是一個類方法,該方法用來判斷字符參數(shù)值是否為大寫。當字符參數(shù)值是大寫時,返回值為true,否則返回false。

【例6.1】Character類提供的常用方法6.2字符串

字符串指的是字符的序列,有兩種類型的字符串:一種是創(chuàng)建以后不需要改變的,稱為字符串常量,在Java中,String類用于存儲和處理字符串常量;另外一種字符串是創(chuàng)建以后,需要對其進行改變的,稱為字符串變量,在Java中,StringBuffer類用于存儲和操作字符串變量。字符串是有序的字符序列,它的最基本元素是字符,一個字符可以是字母、數(shù)字、標點符號或其它的符號。在Java中,可以通過使用在String后面跟一個變量名的形式來直接建立一個保存字符串的變量,例如:Stringstring1="Hello!";這個語句創(chuàng)建了一個名為string1的字符串變量,并將文本Hello!保存在此變量中。在Java中,字符串是用雙引號括起來的,但字符串的內(nèi)容并不包括雙引號。字符串與我們使用過的簡單數(shù)據(jù)類型(int、float、char、boolean等)不一樣,String的第一個字母是大寫的,因為在Java中,字符串是一個特殊的資源,這個資源叫對象,而所有的對象類型名的第一個字母都必須大寫。

6.2.1字符串常量與String類

在Java中,沒有內(nèi)置的字符串類型,字符串常量是作為String類的對象存在的。1.創(chuàng)建String類對象

String類的對象表示的是字符串常量,一個字符串常量創(chuàng)建以后就不能夠被修改了。所以在創(chuàng)建String類對象時,通常需要向構(gòu)造函數(shù)傳遞參數(shù)來指定創(chuàng)建的字符串的內(nèi)容。以下是常用的String類構(gòu)造函數(shù):(1)publicString()該構(gòu)造函數(shù)用于創(chuàng)建一個空的字符串常量。(2)publicString(Stringvalue)該構(gòu)造函數(shù)用于根據(jù)一個已經(jīng)存在的字符串常量來創(chuàng)建一個新的字符串常量,該字符串的內(nèi)容和已經(jīng)存在的字符串常量一致。(3)publicString(charvalue[])該構(gòu)造函數(shù)用于根據(jù)一個已經(jīng)存在的字符數(shù)組來創(chuàng)建一個新的字符串常量。數(shù)組將在本章后面的內(nèi)容中介紹。(4)publicString(StringBufferbuffer)該構(gòu)造函數(shù)用于根據(jù)一個已經(jīng)存在的StringBuffer對象來創(chuàng)建一個新的字符串常量。

2.String類對象的常用操作及方法在Java中,String類包含有50多個方法來實現(xiàn)字符串的各種操作,以下介紹一些我們需要經(jīng)常使用的方法。(1)字符串的連接

publicStringconcat(Stringstr)

該方法的參數(shù)為一個String類對象,作用是將參數(shù)中的字符串str連接到原來字符串的后面。

(2)求字符串的長度

publicintlength()

返回字串的長度,這里的長度指的是字符串中Unicode字符的數(shù)目。(3)求字符串中某一位置的字符

publiccharcharAt(intindex)

該方法在一個特定的位置索引一個字符串,以得到字符串中指定位置的字符。值得注意的是,在字符串中第一個字符的索引是0,第二個字符的索引是1,依次類推,最后一個字符的索引是length()-1。

【例6.2】求字符串的長度及每一個位置上的字符

(4)字符串的比較比較字符串可以利用String類提供的下列方法:

1)publicintcompareTo(StringanotherString)該方法比較兩個字符串,和Character類提供的compareTo方法相似,Character類提供的compareTo方法比較的是兩個字符類數(shù)據(jù),而這里比較的是字符串數(shù)據(jù)。

其比較過程實際上是兩個字符串中相同位置上的字符按Unicode中排列順序逐個比較的結(jié)果。如果在整個比較過程中,沒有發(fā)現(xiàn)任何不同的地方,則表明兩個字符串是完全相等的,compareTo方法返回0;如果在比較過程中,發(fā)現(xiàn)了不同的地方,則比較過程會停下來,這時一定是兩個字符串在某個位置上不相同,如果當前字符串在這個位置上的字符大于參數(shù)中的這個位置上的字符,compareTo方法返回一個大于0的整數(shù),否則返回一個小于0的整數(shù)。2)publicbooleanequals(ObjectanObject)該方法比較兩個字符串,和Character類提供的equals方法相似,因為它們都是重載Object類的方法。該方法比較當前字符串和參數(shù)字符串,在兩個字符串相等的時候返回true,否則返回false。

3)publicbooleanequalsIgnoreCase(StringanotherString)該方法和equals方法相似,不同的地方在于,equalsIgnoreCase方法將忽略字母大小寫的區(qū)別。

(5)從字符串中提取子串利用String類提供的substring方法可以從一個大的字符串中提取一個子串,該方法有兩種常用的形式:

1)publicStringsubstring(intbeginIndex)該方法從beginIndex位置起,從當前字符串中取出剩余的字符作為一個新的字符串返回。

2)publicStringsubstring(intbeginIndex,intendIndex)

該方法從當前字符串中取出一個子串,該子串從beginIndex位置起至endIndex-1為結(jié)束。子串返的長度為endIndex-beginIndex。

(6)判斷字符串的前綴和后綴判斷字符串的前綴是否為指定的字符串利用String類提供的下列方法:

1)publicbooleanstartsWith(Stringprefix)

該方法用于判斷當前字符串的前綴是否和參數(shù)中指定的字符串prefix一致,如果是,返回true,否則返回false。

2)publicbooleanstartsWith(Stringprefix,inttoffset)該方法用于判斷當前字符串從toffset位置開始的子串的前綴是否和參數(shù)中指定的字符串prefix一致,如果是,返回true,否則返回false。

判斷字符串的后綴是否為指定的字符串利用String類提供的方法:

publicbooleanendsWith(Stringsuffix)該方法用于判斷當前字符串的后綴是否和參數(shù)中指定的字符串suffix一致,如果是,返回true,否則返回false。(7)字符串中單個字符的查找字符串中單個字符的查找可以利用String類提供的下列方法:

1)publicintindexOf(intch)該方法用于查找當前字符串中某一個特定字符ch出現(xiàn)的位置。該方法從頭向后查找,如果在字符串中找到字符ch,則返回字符ch在字符串中第一次出現(xiàn)的位置;如果在整個字符串中沒有找到字符ch,則返回-1。2)publicintindexOf(intch,intfromIndex)該方法和第一種方法類似,不同的地方在于,該方法從fromIndex位置向后查找,返回的仍然是字符ch在字符串第一次出現(xiàn)的位置。

3)publicintlastIndexOf(intch)該方法和第一種方法類似,不同的地方在于,該方法從字符串的末尾位置向前查找,返回的仍然是字符ch在字符串第一次出現(xiàn)的位置。

4)publicintlastIndexOf(intch,intfromIndex)該方法和第二種方法類似,不同的地方在于,該方法從fromIndex位置向前查找,返回的仍然是字符ch在字符串第一次出現(xiàn)的位置。

(8)字符串中子串的查找字符串中子串的查找與字符串中單個字符的查找十分相似,可以利用String類提供的下列方法:

1)publicintindexOf(Stringstr)

2)publicintindexOf(Stringstr,intfromIndex)

3)publicintlastIndexOf(Stringstr)

4)publicintlastIndexOf(Stringstr,intfromIndex)

(9)字符串中字符大小寫的轉(zhuǎn)換字符串中字符大小寫的轉(zhuǎn)換,可以利用String類提供的下列方法:

1)publicStringtoLowerCase()該方法將字符串中所有字符轉(zhuǎn)換成小寫,并返回轉(zhuǎn)換后的新串。

2)publicStringtoUpperCase()該方法將字符串中所有字符轉(zhuǎn)換成大寫,并返回轉(zhuǎn)換后的新串。(10)字符串中多余空格的去除

publicStringtrim()

該方法只是去掉開頭和結(jié)尾的空格,并返回得到的新字符串。值得注意的是,在原來字符串中間的空格并不去掉。

(11)字符串中字符的替換

1)publicStringreplace(charoldChar,charnewChar)該方法用字符newChar替換當前字符串中所有的字符oldChar,并返回一個新的字符串。

2)publicStringreplaceFirst(Stringregex,Stringreplacement)該方法用字符串replacement的內(nèi)容替換當前字符串中遇到的第一個和字符串regex相一致的子串,并將產(chǎn)生的新字符串返回。

3)publicStringreplaceAll(Stringregex,Stringreplacement)該方法用字符串replacement的內(nèi)容替換當前字符串中遇到的所有和字符串regex相一致的子串,并將產(chǎn)生的新字符串返回。在字符串中使用特殊字符

當一個字符串被創(chuàng)建或被顯示時,它的文本必須用雙引號括起來,以表示字符串的開始和結(jié)束,但雙引號并不是字符串內(nèi)容的一部分。如果你想讓字符串的內(nèi)容包括雙引號,就必須使用一個特殊符號:\"。每當在字符串中遇到此符號時,它就被一個雙引號代替。例如:System.out.println("Heasked:\"Whoareyou?\"");將會顯示出如下結(jié)果:Heasked:"Whoareyou?"轉(zhuǎn)義字符表7-1Java中常用的特殊字符表例:String中的特殊符號示例。publicclassStringDemo1{ publicstaticvoidmain(Stringargs[]){ System.out.println("Heasked:\"Whoareyou?\""); System.out.println("Heasked:\'Whoareyou?\'"); System.out.println("Heasked:\\Whoareyou?\\"); System.out.println("Heasked:\tWhoareyou?\t"); System.out.println("Heasked:\bWhoareyou?"); System.out.println("Heasked:\nWhoareyou?"); }}運行程序會得到如下輸出結(jié)果:Heasked:"Whoareyou?"Heasked:'Whoareyou?'Heasked:\Whoareyou?\Heasked:Whoareyou?HeaskedWhoareyou?Heasked:Whoareyou?DOS下運行!將字符串合并

字符串之間用操作符“+”能夠?qū)崿F(xiàn)合并,即將兩個字符串連接在一起。如:"Hello!"+"MynameisMary."等價于:"Hello!MynameisMary."連接一個字符串和一個非字符串值時,后者將被轉(zhuǎn)換成字符串。例如:Stringrating="PG"+13;它會把rating的值設(shè)為PG13。這個特性常用于輸出語句。例如:System.out.println("Theansweris:"+answer);常用的字符串處理示例

publicclassStringDemo2{ publicstaticvoidmain(Stringargs[]){ Strings=“Hello";//Hello前后各有二個空格

System.out.println("s="+s); //將s中的所有大寫字母轉(zhuǎn)變?yōu)樾?/p>

System.out.println("s.toLowerCase()="+s.toLowerCase()); //將s中的所有小寫字母轉(zhuǎn)變?yōu)榇髮?/p>

System.out.println("s.toUpperCase()="+s.toUpperCase()); //去掉前后空格

System.out.println("s.trim()="+s.trim()); //取子串(從指定的開始位置到最后) System.out.println("s.substring(5)="+s.substring(5)); //取子串(從指定的開始位置到指定的結(jié)束位置,但不包括結(jié)束位置) System.out.println("s.substring(3,5)="+s.substring(3,5)); //將s中所有的'l'替換為't'以生成新串

Stringnews=s.replace('l','t');System.out.println("replaceall'l'with't':"+news); }}見JB演示s=Hellos.toLowerCase()=hellos.toUpperCase()=HELLOs.trim()=Hellos.substring(5)=los.substring(3,5)=elreplaceall'l'with't':Hetto提取字符

/*從String中提取一個字符,可以使用charAt方法直接訪問指定的字符;需一次提取多個字符,可以使用getChars方法*/classGetCharsDemo{ publicstaticvoidmain(Stringargs[]){ Strings="ThisisandemoofthegetCharsmethod.";intstart=11; intend=15; charbuf[]=newchar[end-start];//提取4個字符

s.getChars(start,end,buf,0); System.out.println(buf); }}結(jié)果demo

比較兩個字符串

classequalsDemo{ publicstaticvoidmain(Stringargs[]){ Strings1="Hello"; Strings2="Hello"; Strings3="Good-bye"; Strings4="HELLO"; System.out.println(s1+"equals"+s2+"->"+s1.equals(s2)); System.out.println(s1+"equals"+s3+"->"+s1.equals(s3)); System.out.println(s1+"equals"+s4+"->"+s1.equals(s4));System.out.println(s1+"equalsIgnoreCase"+s4+"->"+s1.equalsIgnoreCase(s4)); }}HelloequalsHello->trueHelloequalsGood-bye->falseHelloequalsHELLO->falseHelloequalsIgnoreCaseHELLO->true/*比較字符串是否相等,可以使用String的equals方法(完全匹配)和equalsIgnoreCase方法(忽略字符的大小寫區(qū)別)*/例:排序

/*字符串的排序,可以使用String的compareTo方法。如果返回負值,那么該串比參數(shù)中的串要??;如果為正數(shù),該串比參數(shù)中的串要大;若為0,則表示兩串相等。*/classSortString{ staticStringarr[]={"Now","is","the","all"}; publicstaticvoidmain(Stringargs[]){ for(intj=0;j<arr.length;j++){ for(inti=j+1;i<arr.length;i++){ if(arr[i]pareTo(arr[j])<0){ Stringt=arr[j]; arr[j]=arr[i]; arr[i]=t; } } System.out.println(arr[j]); } }}※

程序的輸出結(jié)果是一個以字母順序排列的單詞表:Nowallisthe

從這個例子的結(jié)果可以看出,compareTo區(qū)分字母的大小寫。詞Now排在最前是因為它以大寫字母開始,在字符集中大寫字母A~Z排在前,小寫字母a~z排在后。排在前面的字符對應(yīng)的值小,排在后面的字符對應(yīng)的值大??梢夾SCII碼的重要性!結(jié)果Nowallisthe※

publicclassStringCharacters{publicstaticvoidmain(String[]args){//TextstringtobeanalyzedStringtext="Tobeornottobe,thatisthequestion;Whether'tisnoblerinthemindtosuffer"+"theslingsandarrowsofoutrageousfortune,ortotakearmsagainstaseaoftroubles,"+"andbyopposingendthem?";intspaces=0,//Countofspacesvowels=0,//Countofvowelsletters=0;//Countoflettersfor(inti=0;i<text.length();i++)//Analyzeallthecharactersinthestring{charch=Character.toLowerCase(text.charAt(i));//Checkforvowelsif(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')++vowels;if(Character.isLetter(ch))//Checkforletters++letters;if(Character.isWhitespace(ch))//Checkforspaces++spaces;}System.out.println("Thetextcontainedvowels:"+vowels+"\n"+"consonants:"+(letters-vowels)+"\n"+"spaces:"+spaces);}}統(tǒng)計各類字符數(shù)量publicclassFindCharacters{publicstaticvoidmain(String[]args){//TextstringtobeanalyzedStringtext="Tobeornottobe,thatisthequestion;"+"Whether'tisnoblerinthemindtosuffer"+"theslingsandarrowsofoutragousfortune,"+"ortotakearmsagainstaseaoftroubles,"+"andbyopposingendthem?";intandCount=0;//Numberofand'sinttheCount=0;//Numberofthe'sintindex=-1;//CurrentindexpositionStringandStr="and";//SearchsubstringStringtheStr="the";//Searchsubstring

統(tǒng)計串的數(shù)量//Searchforwardsfor"and"index=text.indexOf(andStr);//Find1st'and'while(index>=0){++andCount;index+=andStr.length();//Steptopositionafterlast'and'index=text.indexOf(andStr,index);}//Searchbackwardsfor"the"index=text.lastIndexOf(theStr);//Findlast'the'while(index>=0){++theCount;index-=theStr.length();//Steptopositionbeforelast'the'index=text.lastIndexOf(theStr,index);}System.out.println("Thetextcontains"+andCount+"ands\n"+"Thetextcontains"+theCount+"thes");}}7.2.2字符串變量與StringBuffer類

1.創(chuàng)建StringBuffer類對象

StringBuffer類對象表示的是字符串變量,每一個StringBuffer類對象都是可以擴充和修改的字符串變量。以下是常用的StringBuffer類構(gòu)造函數(shù):(1)publicStringBuffer()(2)publicStringBuffer(intlength)

(3)publicStringBuffer(Stringstr)

2.StringBuffer類對象的常用方法(1)StringBuffer類對象的擴充

StringBuffer類提供兩組方法用來擴充StringBuffer對象所包含的字符,分別是:

1)publicStringBufferappend(Objectobj)

append方法用于擴充StringBuffer對象所包含的字符,該方法將指定的參數(shù)對象轉(zhuǎn)化為字符串后,將其附加在原來的StringBuffer對象之后,并返回新的StringBuffer對象。附加的的參數(shù)對象可以是各種數(shù)據(jù)類型的,如int、char、String、double等。2)publicStringBufferinsert(

int插入位置,參數(shù)對象類型,參數(shù)對象名)該方法將指定的參數(shù)對象轉(zhuǎn)化為字符串后,將其插入在原來的StringBuffer對象中指定的位置,并返回新的StringBuffer對象。(2)StringBuffer類對象的長度與容量一個StringBuffer類對象的長度指的是它包含的字符個數(shù);容量指的是被分配的字符空間的數(shù)量。

1)publicintlength()該方法返回當前StringBuffer類對象包含的字符個數(shù)。

2)publicintcapacity()該方法返回當前StringBuffer類對象分配的字符空間的數(shù)量。

(3)StringBuffer類對象的修改

publicvoidsetCharAt(intindex,charch)

該方法將當前StringBuffer對象中的index位置的字符替換為指定的字符ch。(4)字符串的賦值和加法字符串是在程序中要經(jīng)常使用的數(shù)據(jù)類型,在Java編譯系統(tǒng)中引入了字符串的賦值和加法操作。

【例6.4】反轉(zhuǎn)字符串中的字符7.3數(shù)組

數(shù)組是一個長度固定的數(shù)據(jù)結(jié)構(gòu),它存儲多個相同類型的數(shù)值。數(shù)組直接被Java編程語言所支持,但是無論數(shù)組是由原始類型構(gòu)成,或者帶有其它類數(shù)據(jù),數(shù)組也是一個對象。數(shù)組是一個Object類的一個不明顯的擴展,所以可以指定一個數(shù)組給一個類型定義為Object的變量。數(shù)組是相同類型的數(shù)據(jù)元素按順序組成的一種復(fù)合數(shù)據(jù)類型,元素在數(shù)組中的相對位置由下標來指明。數(shù)組中的每個元素通過數(shù)組名加數(shù)組下標進行引用。數(shù)組作為一種特殊的數(shù)據(jù)類型具有以下特點:一個數(shù)組中所有的元素應(yīng)該是同一類型;數(shù)組中的元素是有順序的;數(shù)組中的一個元素通過數(shù)組名和數(shù)組下標來確定。數(shù)組有一維數(shù)組和多維數(shù)組之分。IntroducingArraysdouble[]myList=newdouble[10]Arrayisadatastructurethatrepresentsacollectionofthesametypesofdata.Javatreatsthesearraysasobjects.AnArrayof10Elements

oftypedouble

7.3.1一維數(shù)組一維數(shù)組的聲明(declaration)與創(chuàng)建(creating)同其他變量一樣,在使用數(shù)組前,必須先聲明它。數(shù)組聲明的格式為:類型

數(shù)組名[];其中類型指出了數(shù)組中各元素的數(shù)據(jù)類型,包括基本類型和復(fù)合類型。數(shù)組名為一個標識符。“[]”部分指明該變量是一個數(shù)組類型變量。例如:int

list[];例如:int

list[];int

list[];聲明了一個整型數(shù)組,數(shù)組中的每個元素為整型數(shù)。數(shù)組聲明時,也可以將“[]”放在類型之后,例如:int[]list;它的效果和上面的例子一樣。在聲明數(shù)組時,不直接指出數(shù)組中元素的個數(shù)(即數(shù)組長度)。數(shù)組聲明之后尚不能立即被訪問,因為還沒有為數(shù)組元素分配內(nèi)存空間。如果試圖在聲明后直接給數(shù)組中的任一元素賦值,編譯器將要提示如下信息:

Variablelistmaynothavebeeninitialized.

用new關(guān)鍵字來創(chuàng)建數(shù)組在數(shù)組聲明之后為數(shù)組元素分配存儲空間,同時對數(shù)組元素進行初始化。new語句指明了分配類型以及由一個正整數(shù)表示的數(shù)組長度,其格式如下:數(shù)組名=

new類型

[數(shù)組長度];例如:list=new

int[3];可以為整型數(shù)組list分配3個整數(shù)元素所占據(jù)的內(nèi)存空間,并使每個元素初值為0。把數(shù)組的聲明和創(chuàng)建合在一起為簡化起見,還可以把數(shù)組的聲明和創(chuàng)建合在一起,如:類型

數(shù)組名[]=new

類型

[數(shù)組長度];例如:int

list[]=newint[3];

這個語句等同于下面兩個語句:intlist[];list=newint[3];用new關(guān)鍵字為一個數(shù)組分配內(nèi)存空間后,系統(tǒng)將為每個數(shù)組元素都賦予一個初值,這個初值取決于數(shù)組的類型。所有數(shù)值型數(shù)組元素的初值為0,字符型數(shù)組元素的初值為一個不可見的ISO控制符(’\u0000’),布爾型數(shù)組元素的初值為false,字符串數(shù)組和所有其他對象數(shù)組在創(chuàng)建時元素的初值為null。在實際應(yīng)用中,用戶應(yīng)根據(jù)具體情況來對數(shù)組元素重新進行賦值。數(shù)組一旦創(chuàng)建之后,就不能再改變其長度。一維數(shù)組的初始化

數(shù)組初始化就是為數(shù)組元素指定初始值。通常在創(chuàng)建數(shù)組時,Java會使每個數(shù)組元素初始化為一個默認值。但在許多情況下,并不希望數(shù)組的初值為默認值,此時,就需要用賦值語句來對數(shù)組進行初始化。數(shù)組的初始化方式有兩種。一種方式是像初始化簡單類型一樣自動初始化數(shù)組,即在聲明數(shù)組的同時進行初始化。例如:inta[]={1,2,3,4,5};

上述語句聲明并創(chuàng)建了數(shù)組a,并且為數(shù)組每個元素賦值即初始化,使a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5。由上可見,數(shù)組初始化可由花括號“{}”括起的一串由逗號分隔的表達式組成,逗號(,)分隔數(shù)組元素中的值。在語句中不必明確指明數(shù)組的長度,因為它已經(jīng)體現(xiàn)在所給出的數(shù)據(jù)元素個數(shù)之中了,系統(tǒng)會自動根據(jù)所給的元素個數(shù)為數(shù)組分配一定的內(nèi)存空間,如上例中數(shù)組a的長度自動設(shè)置為5。應(yīng)該注意的是,“{}”里的每一個數(shù)組元素的數(shù)據(jù)類型必須是相同的?!纠?.1】劃分成績等級例:自動初始化數(shù)組下面的代碼在整型數(shù)組month_days中保存了一年中每月的天數(shù)。classArray2{ publicstaticvoidmain(String[]args){intmonth_days[]={31,28,31,30,31,30,31,31,30,31,30,31};System.out.println("Mayhas"+month_days[4]+"days."); }}

運行結(jié)果:Mayhas31days.

數(shù)組的初始化的另一種方式是在聲明之后再創(chuàng)建數(shù)組,然后為每個元素賦值。

InitializingArraysUsingaloop: for(inti=0;i<myList.length;i++) myList[i]=(double)i;Declaring,creating,initializinginonestep: double[]myList={1.9,2.9,3.4,3.5};一維數(shù)組元素的使用

聲明了一個數(shù)組,并用new語句為它分配了內(nèi)存空間后,就可以在程序中像使用任何變量一樣來使用數(shù)組元素,即可以在任何允許使用變量的地方使用數(shù)組元素。數(shù)組元素的標識方式為:數(shù)組名[下標]

其中下標為非負的整型常數(shù)或表達式,其數(shù)據(jù)類型只能為byte,short,int,而不能為long。如a[3],b[i](i為整型),c[i*5]等。下標的取值范圍從0開始,一直到數(shù)組的長度減1。int

list[]=newint[3];它有3個元素,分別為:list[0],list[1]和list[2]。(注意:不存在list[3])Java在對數(shù)組元素操作時會對數(shù)組下標進行越界檢查,以保證安全性。若在Java程序中超出了對數(shù)組下標的使用范圍(例如:數(shù)組的最大下標為5,但是在程序中存取了下標為8或-4的元素),則在運行此程序時將出現(xiàn)如下錯誤信息:

Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException※

數(shù)組屬性length

在Java中,對于每個數(shù)組都有一個屬性length來指明其長度(即該數(shù)組可以容納的元素的個數(shù)),由程序自動計算。例如:list.length指明了數(shù)組list的長度。如下面的這段程序,就是給每個元素賦值,并將其值送往標準輸出設(shè)備。例:數(shù)組元素的賦值與輸出

classArray1{ publicstaticvoidmain(String[]args){ intlist[]=newint[5]; System.out.println("list數(shù)組的長度為:"+list.length); for(inti=0;i<list.length;i++){list[i]=i*5;System.out.println("list["+i+"]="+list[i]); } }}運行結(jié)果:list數(shù)組的長度為:5list[0]=0list[1]=5list[2]=10list[3]=15list[4]=20publicclassBubbleSort{publicstaticvoidmain(Stringargs[]){inti,j;intintArray[]={30,1,-9,70,25};intl=intArray.length;for(i=1;i<l;i++)for(j=0;j<=l-i-1;j++)if(intArray[j]>intArray[j+1]) {intt=intArray[j]; intArray[j]=intArray[j+1]; intArray[j+1]=t; } for(i=0;i<l;i++)System.out.println(intArray[i]+"");}}例6-3:用冒泡排序法對一維數(shù)組中的元素按值從小到大進行排序,并輸出最終結(jié)果

運行結(jié)果:-91253070經(jīng)典數(shù)組中元素的查找

publicclassLinearSearch{publicstaticvoidmain(String[]args){int[]list=newint[10];System.out.print("Thelistis");//Createthelistrandomlyanddisplayitfor(inti=0;i<list.length;i++){list[i]=(int)(Math.random()*100);System.out.print(list[i]+"");}System.out.println();數(shù)組中元素的查找

System.out.print("Enterakey");//Prompttheusertoenterakeyintkey=MyInput.readInt();intindex=linearSearch(key,list);if(index!=-1)System.out.println("Thekeyisfoundinindex"+index);elseSystem.out.println("Thekeyisnotfoundinthelist");}publicstaticintlinearSearch(intkey,int[]list)//Themethodforfindingakeyinthelist{for(inti=0;i<list.length;i++)if(key==list[i])returni;return-1;}}用二分法在數(shù)組中查找元素publicclassBinarySearch{//Mainmethodpublicstaticvoidmain(String[]args){int[]list=newint[10];//CreateasortedlistanddisplayitSystem.out.print("Thelistis");for(inti=0;i<list.length;i++){list[i]=2*i+1;System.out.print(list[i]+"");}System.out.println();//PrompttheusertoenterakeySystem.out.print("Enterakey");intkey=MyInput.readInt();intindex=binarySearch(key,list);if(index!=-1)System.out.println("Thekeyisfoundinindex"+index);elseSystem.out.println("Thekeyisnotfoundinthelist");}用二分法在數(shù)組中查找元素publicstaticintbinarySearch(intkey,int[]list){intlow=0;intup=list.length-1;returnbinarySearch(key,list,low,up);}//Usebinarysearchtofindthekeyinthelistbetweenlist[low]list[up]publicstaticintbinarySearch(intkey,int[]list,intlow,intup){if(low>up)//Thelisthasbeenexhaustedwithoutamatchreturn-1;intmid=(low+up)/2;if(key<list[mid])returnbinarySearch(key,list,low,mid-1);elseif(key==list[mid])returnmid;elseif(key>list[mid])returnbinarySearch(key,list,mid+1,up);return-1;}對象數(shù)組//TotalArea.java:TestpassinganarrayofobjectstothemethodpublicclassTotalArea{publicstaticvoidmain(String[]args){

Circle[]circleArray;//DeclarecircleArraycircleArray=createCircleArray();//CreatecircleArray//PrintcircleArrayandtotalareasofthecirclesprintCircleArray(circleArray);}//CreateanarrayofCircleobjectspublicstaticCircle[]createCircleArray(){Circle[]circleArray=newCircle[10];for(inti=0;i<circleArray.length;i++){circleArray[i]=newCircle(Math.random()*100);}//ReturnCirclearrayreturncircleArray;}對象數(shù)組

publicstaticvoidprintCircleArray(Circle[]circleArray){System.out.println("Theradiiofthecirclesare");for(inti=0;i<circleArray.length;i++){System.out.print("\t\t\t\t"+circleArray[i].getRadius()+'\n');}System.out.println("\t\t\t\t-------------------");//ComputeanddisplaytheresultSystem.out.println("Thetotalareasofcirclesis\t"+sum(circleArray));}

publicstaticdoublesum(Circle[]circleArray)//Addcircleareas{//Initializesumdoublesum=0;//Addareastosumfor(inti=0;i<circleArray.length;i++)sum+=circleArray[i].findArea();returnsum;}}7.3.2多維數(shù)組(multi-dimensionalarrays)

在Java中并不直接支持多維數(shù)組,所以,多維數(shù)組的聲明是通過對一維數(shù)組的嵌套式聲明來實現(xiàn)的,即用“數(shù)組的數(shù)組”來聲明多維數(shù)組。例如二維數(shù)組為一個特殊的一維數(shù)組,其每個元素又是一個一維數(shù)組。下面我們主要以二維數(shù)組為例來進行說明,更多維的情況是類似的。二維數(shù)組的聲明與創(chuàng)建二維數(shù)組聲明的格式為:類型

數(shù)組名[][];例如:int

intArray[][];與一維數(shù)組一樣,此時還沒有為數(shù)組元素分配內(nèi)存空間,還需要用new關(guān)鍵字來創(chuàng)建數(shù)組,然后才可以使用該數(shù)組的每個元素?!?/p>

對二維數(shù)組來說,分配內(nèi)存空間有下面幾種方法:

(1)直接為每一維分配空間,如:int

a[][]=new

int[2][3];該語句創(chuàng)建了一個二維數(shù)組a,其較高一維含兩個元素,每個元素為由3個整型數(shù)構(gòu)成的整型數(shù)組。此時該數(shù)組的示意圖為:

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2](2)從最高維開始,分別為每一維分配空間,如:int

b[][]=newint[2][];//最高維含2個元素,每個元素為一個整型數(shù)組b[0]=newint[3];//最高維第一個元素是一個長度為3的整型數(shù)組b[1]=newint[5];//最高維第二個元素是一個長度為5的整型數(shù)組此時該數(shù)組的示意圖為:b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[1][3]b[1][4]注意:

在使用運算符new來分配內(nèi)存時,對于多維數(shù)組至少要給出最高維的大小。例如:如果在程序中出現(xiàn)inta2[][]=newint[][];編譯器將要提示如下錯誤:Arraydimensionmissing.二維數(shù)組元素的初始化

二維數(shù)組元素的初始化有兩種方式:1.

直接對每個元素進行賦值;2.

在聲明數(shù)組的同時進行初始化。如:

inta[][]={{2,3},{1,5},{3,4}};聲明了一個3×2的數(shù)組,并對每個元素賦值。即:

a[0][0]=2a[0][1]=3a[1][0]=1a[1][1]=5a[2][0]=3a[2][1]=4二維數(shù)組元素的引用

對二維數(shù)組中每個元素,其引用方式為:數(shù)組名[下標1]

[下標2]其中下標1、下標2為非負的整型常數(shù)或表達式。如:a[2][3]、cc[i+2][j*3](i,j為整數(shù))等。每一維的下標取值都從0開始。例:創(chuàng)建一個44的int型矩陣,使其對角線上的元素初始化為1

/*二維數(shù)組的例子:打印一個4*4的int型矩陣*/classMatrix{publicstaticvoidmain(Stringargs[]){ intm[][]; m=newint[4][4]; m[0][0]=1; m[1][1]=1; m[2][2]=1; m[3][3]=1; System.out.println(m[0][0]+""+m[0][1]+""+m[0][2]+""+m[0][3]); System.out.println(m[1][0]+""+m[1][1]+""+m[1][2]+""+m[1][3]); System.out.println(m[2][0]+""+m[2][1]+""+m[2][2]+""+m[2][3]); System.out.println(m[3][0]+""+m[3][1]+""+m[3][2]+""+m[3][3]); }}結(jié)果1000010000100001例:構(gòu)造楊輝三角形

classSj1{ publicstaticvoidmain(String[]args){ inti,j; //直接指定初值

intyanghui[][]={{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,

溫馨提示

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

最新文檔

評論

0/150

提交評論