java面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁(yè)
java面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁(yè)
java面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁(yè)
java面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁(yè)
java面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章數(shù)組Java教材編寫(xiě)組教學(xué)目標(biāo)理解數(shù)組的概念了解使用數(shù)組的步驟:聲明數(shù)組引用變量、創(chuàng)建數(shù)組、初始化數(shù)組和處理數(shù)組掌握一維數(shù)組和二維數(shù)組的應(yīng)用熟悉查找和數(shù)組排序的方法理解字符數(shù)組、對(duì)象數(shù)組和ArrayList類(lèi)的應(yīng)用聲明數(shù)組

數(shù)組要經(jīng)過(guò)聲明及初始化以后,才能被使用。數(shù)組的聲明方式有下面兩種:1.?dāng)?shù)據(jù)類(lèi)型數(shù)組名[];2.?dāng)?shù)據(jù)類(lèi)型[]數(shù)組名;其中類(lèi)型(type)可以為Java中任意的數(shù)據(jù)類(lèi)型,包括簡(jiǎn)單類(lèi)型和組合類(lèi)型,數(shù)組名arrayName為一個(gè)合法的標(biāo)識(shí)符,[]指明該變量是一個(gè)數(shù)組類(lèi)型變量。例如:intintArray[];聲明了一個(gè)整型數(shù)組,數(shù)組中的每個(gè)元素為整型數(shù)據(jù)。初始化數(shù)組數(shù)組中元素的個(gè)數(shù)稱(chēng)為數(shù)組大小或數(shù)組長(zhǎng)度。與C、C++不同,Java在數(shù)組的定義中并不為數(shù)組元素分配內(nèi)存,因此[]中不用指出數(shù)組中元素的個(gè)數(shù),即數(shù)組長(zhǎng)度,而且對(duì)于如上定義的一個(gè)數(shù)組是不能訪問(wèn)它的任何元素的。數(shù)組必須經(jīng)過(guò)初始化后,才能應(yīng)用數(shù)組的元素。靜態(tài)初始化數(shù)組的初始化分為靜態(tài)初始化和動(dòng)態(tài)初始化兩種.靜態(tài)初始化:在定義數(shù)組的同時(shí)對(duì)數(shù)組元素進(jìn)行初始化,例如:

intintArray[]={1,2,3,4};//定義了一個(gè)含有4個(gè)元素的int型數(shù)組。動(dòng)態(tài)初始化

動(dòng)態(tài)初始化:使用運(yùn)算符new為數(shù)組分配空間,對(duì)于簡(jiǎn)單類(lèi)型的數(shù)組,其格式如下:

typearrayName[]=newtype[arraySize];type[]arrayName=newtype[arraySize];對(duì)于復(fù)合類(lèi)型的數(shù)組,需要經(jīng)過(guò)兩步空間分配。首先:typearrayName[]=newtype[arraySize];

然后:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);數(shù)組初始化實(shí)例例如:StringstringArrar[];//定義一個(gè)String類(lèi)型的數(shù)組stringArray=newString[3];//給數(shù)組stringArra分配3個(gè)應(yīng)用空間,初始化每個(gè)引用值為nullstringArray[0]=newString(“how”);stringArray[1]=newString(“are”);stringArray[2]=newString(“you”);數(shù)組元素引用當(dāng)定義了一個(gè)數(shù)組,并用運(yùn)算符new為它分配了內(nèi)存空間后,就可以引用數(shù)組中的每一個(gè)元素了。元素的引用方式為:arrayName[index]index為數(shù)組下標(biāo),可以是整型常數(shù)或表達(dá)式,如:arrayName[1],arrayName[i],arrayName[6*i]等。下標(biāo)是0序的,即從0開(kāi)始,一直到數(shù)組長(zhǎng)度減1。通常,Java會(huì)自動(dòng)進(jìn)行數(shù)組下標(biāo)越界檢查,如果下標(biāo)超出該范圍,會(huì)產(chǎn)生ArrayIndexOutOfBoundsException異常,即數(shù)組下標(biāo)越界異常。因此,編寫(xiě)程序時(shí)最好使用數(shù)組的length屬性獲得數(shù)組大小,從而使下標(biāo)不超出其取值范圍。

數(shù)組的賦值聲明數(shù)組的同時(shí)初始化數(shù)組格式如下:數(shù)據(jù)類(lèi)型[]數(shù)組名={第一個(gè)元素,第二個(gè)元素,第三個(gè)元素,…};先聲明并創(chuàng)建后,再賦值例如,int[]array1=newint[10];array1[0]=6;array1[1]=7;array1[2]=8;數(shù)組的應(yīng)用1、數(shù)組中元素的查找:順序查找順序查找通常用于一組無(wú)序的數(shù)據(jù)中查找。將待查找的數(shù)據(jù)與數(shù)組中的每一個(gè)元素依次進(jìn)行比較,直到查找的數(shù)據(jù)與數(shù)組中的一個(gè)元素匹配或全部查找完為止。如果找到了一個(gè)匹配元素,則返回?cái)?shù)組中該元素的位置。若沒(méi)有找到。則返回-1。例5.1編寫(xiě)程序,讀入10個(gè)整數(shù),求出它們中的最小數(shù)。//文件名Ex5_1.javaimportjava.util;publicclassEx5_1{publicstaticvoidmain(Stringargs[]){intnum[]=newint[10];

System.out.println("請(qǐng)輸入10個(gè)整數(shù)");

for(inti=0;i<num.length;i++)

num[i]=DefInput.readInt();intmin=num[0];for(inti=1;i<num.length;i++)if(min>num[i])min=num[i];System.out.print("最小數(shù)是:"+min);

}}例5.1程序分析:

程序中聲明并創(chuàng)建了10個(gè)元素的數(shù)組num,用for循環(huán)輸入了10個(gè)整數(shù)。循環(huán)體中使用了第2章的自定義類(lèi)DefInput.class的readInt()方法輸入整數(shù)。注意:每輸入一個(gè)數(shù),要按回車(chē),再輸入下一個(gè)數(shù)。變量min,用于存放最小值,先將num[0]的值賦給min,然后min分別與num[i](i=1~9的9個(gè)數(shù))比較,若min大于num[i],則將num[i]的值賦給min,否則min不變。比較操作完成后,min中存放的數(shù)值即為數(shù)組num中的最小值。數(shù)組應(yīng)用2、冒泡法排序用冒泡法對(duì)數(shù)列(74932)從小到大排序。分析:冒泡法排序的思路是將相鄰兩個(gè)數(shù)兩兩比較,把較小數(shù)調(diào)到前面。如有5個(gè)數(shù)7、4、9、3、2,要求按從小到大排序,比較步驟如下:冒泡法排序第1輪:

第一次7和4對(duì)調(diào),第二次因7<9不用對(duì)調(diào),第三次將9和3對(duì)調(diào),┅,得到4、7、3、2、9的順序。一輪比較后,最大數(shù)已在最后(沉底),小數(shù)向上移動(dòng)(浮起)。如下所示。第1次:74932第2次:47932第3次:47932第4次:47392結(jié)果:47329第2輪:

將前4個(gè)數(shù)4,7,3,2兩兩比較,次大數(shù)沉底。如下所示。第1次:47329第2次:47329第3次:43729結(jié)果:43279第3輪,得第3個(gè)大數(shù)。第4輪,得第4個(gè)大數(shù)。剩下的一個(gè)為最小數(shù)??梢?jiàn)這5個(gè)整數(shù)共需要4輪比較,在每一輪中,每個(gè)數(shù)需與它的后一個(gè)數(shù)比較。n個(gè)整數(shù)需要n-1輪比較。例5.2用冒泡法對(duì)數(shù)列(74932)從小到大排序。publicclassEx5_2{publicstaticvoidmain(String[]args){int[]a={7,4,9,3,2};inti,j,t;System.out.print("排序前數(shù)組元素是:");for(i=0;i<5;i++)System.out.print(a[i]+"");System.out.println();for(i=0;i<4;i++)for(j=0;j<4-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}System.out.print("排序后數(shù)組元素是:");for(i=0;i<5;i++)System.out.print(a[i]+"");}}字符數(shù)組字符數(shù)組中的每個(gè)元素都是字符類(lèi)型的數(shù)據(jù),它的創(chuàng)建方法與一般的數(shù)組相似。字符數(shù)組的創(chuàng)建如:charstr1[]=newchar[10];該語(yǔ)句聲明并創(chuàng)建了字符數(shù)組str1,該數(shù)組中可以存儲(chǔ)10個(gè)字符。字符數(shù)組可以初始化,例如,

charstr2={'a','b','c','d','e'};其中,str2是一個(gè)字符數(shù)組,共有5個(gè)元素,str2[0]為'a',str2[1]為'b‘,str2[2]為'c‘,str2[3]為'd',str2[4]為'e'。字符數(shù)組的元素可以被賦值。例如,s2[1]='d';下面通過(guò)for循環(huán)語(yǔ)句給一個(gè)字符數(shù)組賦值。charstr[]=newchar[100];for(inti=0;i<26;i++)str[i]='A'+i;經(jīng)過(guò)上述循環(huán)后,數(shù)組str中將存儲(chǔ)26個(gè)大寫(xiě)字母。

字符串與字符數(shù)組字符串不是字符數(shù)組,但是可以轉(zhuǎn)換為字符數(shù)組,反之亦然。字符串和字符數(shù)組之間的轉(zhuǎn)換有以下幾種形式:使用toCharArray方法將字符串轉(zhuǎn)換為字符數(shù)組。例如,下面語(yǔ)句將字符串“word”中的字符轉(zhuǎn)換為數(shù)組charArray中的數(shù)組元素。char[]charArray="word".toCharArray();則charArray[0]是'w',charArray[1]是'o',charArray[2]是'r',charArray[3]是'd'。使用String(char[])構(gòu)造方法或valueOf(char[])方法,將字符數(shù)組轉(zhuǎn)換為字符串。例如,下面語(yǔ)句使用String構(gòu)造方法從數(shù)組構(gòu)造了一個(gè)字符串。Stringstr=newString(newchar[]{‘w’,’o’,’r’,’d’});下面語(yǔ)句使用valueOf方法從數(shù)組構(gòu)造了一個(gè)字符串。Stringstr=String.valueOf(newchar[]{‘w’,’o’,’r’,’d’});例5.3從鍵盤(pán)輸入一個(gè)字符串,請(qǐng)判斷該字符串是否是回文。

回文是指該字符串順序和逆序是一樣的,例如mom是回文。本程序提示用戶從鍵盤(pán)輸入一個(gè)字符串,用while循環(huán)來(lái)比較字符并且確定字符串是否是回文。使用循環(huán)檢查字符串的第一個(gè)字符是否和最后一個(gè)字符一樣。如果是,檢查第二個(gè)字符是否和倒數(shù)第二個(gè)字符一樣。這個(gè)過(guò)程持續(xù)到檢查出不相同的字符或字符串中的所有字符都已檢查完,若字符串中含有奇數(shù)個(gè)字符,則不檢查中間的字符。例5.3程序代碼importjavax.swing.JOptionPane;publicclassEx5_3{publicstaticvoidmain(String[]args){inti=0,flag=0;Strings=JOptionPane.showInputDialog(null,"輸入一字符串:","例5.6輸入",JOptionPane.QUESTION_MESSAGE);Stringoutput="";if(comp(s))output+=s+"是回文";elseoutput+=s+"不是回文";JOptionPane.showMessageDialog(null,output,"例5.6輸出",JOptionPane.INFORMATION_MESSAGE);System.exit(0);}publicstaticbooleancomp(Strings){inti=0;char[]charArray=s.toCharArray();while(i<s.length()/2){if(charArray[i]!=charArray[s.length()-1-i])returnfalse;i++;}returntrue;}}二維數(shù)組

聲明二維數(shù)組的格式有如下兩種:數(shù)據(jù)類(lèi)型[][]數(shù)組名;數(shù)據(jù)類(lèi)型數(shù)組名[][];創(chuàng)建二維數(shù)組的方法,使用關(guān)鍵字new。格式如下:數(shù)組名=new數(shù)據(jù)類(lèi)型[行長(zhǎng)度][列長(zhǎng)度];可以使用一個(gè)簡(jiǎn)化的方式來(lái)聲明、創(chuàng)建和初始化二維數(shù)組。如,int[][]array={{1,2,3},{4,5,6},{7,8,9},{11,12,13}};例5.4定義一個(gè)整型的二維數(shù)組,分行輸出每行數(shù)組元素并求所有元素之和。publicclassEx5_4{publicstaticvoidmain(String[]args){inti,j,sum=0;intb[][]={{1,2,3},{4,5,6,7,8},{9,10,11,12,13,14,15}};for(i=0;i<b.length;i++){System.out.print("第"+(i+1)+"行的所有元素:");for(j=0;j<b[i].length;j++){sum+=b[i][j];System.out.print(b[i][j]+"\t");}System.out.println();System.out.println("二維數(shù)組所有的元素的和sum="+sum);}}例5.4程序分析

定義二維數(shù)組b,各個(gè)元素分別賦值;用嵌套的雙層循環(huán)實(shí)現(xiàn)程序功能。外層for語(yǔ)句控制數(shù)組b的各行,行下標(biāo)從0開(kāi)始到b.length-1,內(nèi)層for語(yǔ)句控制數(shù)組b的第i行的各列,列下標(biāo)從0開(kāi)始到b[i].length-1。

ArrayList類(lèi)

Java中數(shù)組的大小在創(chuàng)建數(shù)組時(shí)給出,一旦給出數(shù)組大小,就不可能再改變。有時(shí)程序中要用到大小不確定的數(shù)組,這時(shí)可以用兩種方法解決:一是定義盡可能大的數(shù)組;二是使用java.util包中的ArrayList類(lèi),這個(gè)類(lèi)實(shí)現(xiàn)了與數(shù)組類(lèi)似的數(shù)據(jù)結(jié)構(gòu),還可以根據(jù)程序的需要自動(dòng)改變大小。它的使用與數(shù)組有一些區(qū)別。下面的語(yǔ)句創(chuàng)建了一個(gè)ArrayList對(duì)象mlist,ArrayListmlist=newArrayList();ArrayList對(duì)象mlist中可以存放基本數(shù)據(jù)類(lèi)型、對(duì)象等元素。對(duì)象數(shù)組Java中聲明的數(shù)組的數(shù)據(jù)類(lèi)型也可以是對(duì)象。數(shù)組類(lèi)型為對(duì)象的數(shù)組稱(chēng)為對(duì)象數(shù)組。對(duì)象數(shù)組先作為數(shù)組定義,用new為該數(shù)組分配內(nèi)存,然后用new為每一個(gè)作為數(shù)組元素的對(duì)象分配內(nèi)存。對(duì)象數(shù)組和基本數(shù)據(jù)類(lèi)型的數(shù)組一樣,可以作為方法的參數(shù)或方法的返回值。在main()方法中,就是一個(gè)String類(lèi)的對(duì)象數(shù)組作為方法參數(shù)。注意:對(duì)象數(shù)組聲明后,不能立刻存放數(shù)據(jù)。這是因?yàn)閷?duì)象數(shù)組的聲明只會(huì)產(chǎn)生對(duì)象的引用,并沒(méi)有產(chǎn)生對(duì)象的實(shí)例??梢园匆韵路椒ㄊ褂茫篗yObjectobj[]=newMyObject[2];obj[0]=newMyObject();obj[0].data=5;實(shí)例:選擇排序

假定對(duì)一組有序數(shù)進(jìn)行升序排序。選擇排序就是每次尋找這一序列中最大的數(shù),并將其與序列的最后面數(shù)交換位置,然后尋找未排序序列中的最大數(shù)與最后面數(shù)交換位置,依次類(lèi)推直到全部排序完成。選擇排序

分析下面的數(shù)列:2843715選擇8(最大的數(shù)字)并與5(數(shù)列中最后一個(gè)數(shù)字)交換,新的數(shù)列是:2543718數(shù)字8現(xiàn)在位于正確的位置,因此不再需要考慮它(下劃線表示一個(gè)數(shù)字已經(jīng)被排序)。在未排序列中找出最大數(shù)7,將7和1的位置交換,得到新的數(shù)列:254317

8繼續(xù)相同的過(guò)程,最后整個(gè)數(shù)列將是從小到大排序的。例5.5請(qǐng)把以上數(shù)列按從小到大順序排序。

publicclassEx5_4{publicstaticvoidmain(String[]args){int[]mList={2,8,4,3,7,1,5};System.out.println("mListbeforesortis:");printList(mList);seleSort(mList);System.out.println();System.out

溫馨提示

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

評(píng)論

0/150

提交評(píng)論