面向?qū)ο?教案(第13講)java.util.Arrays類;(第14講)二維數(shù)組_第1頁(yè)
面向?qū)ο?教案(第13講)java.util.Arrays類;(第14講)二維數(shù)組_第2頁(yè)
面向?qū)ο?教案(第13講)java.util.Arrays類;(第14講)二維數(shù)組_第3頁(yè)
面向?qū)ο?教案(第13講)java.util.Arrays類;(第14講)二維數(shù)組_第4頁(yè)
面向?qū)ο?教案(第13講)java.util.Arrays類;(第14講)二維數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第13講教學(xué)對(duì)象計(jì)算機(jī)科學(xué)技術(shù)專業(yè)授課內(nèi)容第5章數(shù)組5.4java.util.Arrays類5.5案例學(xué)習(xí)——橋牌隨機(jī)發(fā)牌課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識(shí)目標(biāo)1.了解java.util.Arrays類的應(yīng)用2.掌握java.util.Arrays類的復(fù)制、排序、元素的查找、比較、填充(二)能力目標(biāo)1.通過探究數(shù)組的應(yīng)用和使用方法,提高學(xué)生編程能力2.通過探究Arrays類的應(yīng)用和使用方法,提高學(xué)生編程能力3.理解軟件開發(fā)的新方法,使用這種方法開發(fā)的軟件具有可復(fù)用、易維護(hù)和可擴(kuò)展等特性教學(xué)方法采用講授法、演示法、討論法、案例教學(xué)。學(xué)時(shí)及分配(第1學(xué)時(shí)50分鐘)課堂講授20分鐘課堂實(shí)踐30分鐘5.4java.util.Arrays類學(xué)時(shí)及分配(第2學(xué)時(shí)50分鐘)課堂講授20分鐘課堂實(shí)踐30分鐘5.5案例學(xué)習(xí)——橋牌隨機(jī)發(fā)牌知識(shí)點(diǎn)分析重點(diǎn):java.util.Arrays類的復(fù)制、排序、元素的查找、比較、填充難點(diǎn):java.util.Arrays類的排序教學(xué)過程設(shè)計(jì)內(nèi)容方式問題導(dǎo)入:java.util.Arrays類定義了若干靜態(tài)方法對(duì)數(shù)組操作,極大方便了程序員。本節(jié)我們來學(xué)習(xí)Arrays類提供的方法。內(nèi)容要點(diǎn)5.4java.util.Arrays類java.util.Arrays類定義了若干靜態(tài)方法對(duì)數(shù)組操作,包括對(duì)數(shù)組排序、在已排序的數(shù)組中查找指定元素、數(shù)組元素的拷貝、比較兩個(gè)數(shù)組是否相等、將一個(gè)值填充到數(shù)組的每個(gè)元素中。publicstaticintbinarySearch(int[]a,intkey):根據(jù)給定的鍵值,查找該值在數(shù)組中的位置,如果找到指定的值,則返回該值的下標(biāo)值。如果查找的值不包含在數(shù)組中,方法的返回值為(-插入點(diǎn)-1)。插入點(diǎn)為指定的值在數(shù)組中應(yīng)該插入的位置。publicstaticvoidsort(int[]a):對(duì)數(shù)組a按自然順序排序。publicstaticvoidsort(int[]a,intfromIndex,inttoIndex):對(duì)數(shù)組a中的元素從起始下標(biāo)fromIndex到終止下標(biāo)toIndex之間的元素排序。publicstaticdouble[]copyOf(double[]original,intnewLength):方法的original參數(shù)是原數(shù)組,newLength參數(shù)是新數(shù)組的長(zhǎng)度。publicstaticvoidfill(int[]a,intval):用指定的val值填充數(shù)組a中的每個(gè)元素。publicstaticbooleanequals(boolean[]a,boolean[]b):比較布爾型數(shù)組a與b是否相等。publicstaticStringtoString(int[]a):將數(shù)組a的元素轉(zhuǎn)換成字符串,它有多個(gè)重載的版本,方便對(duì)數(shù)組的輸出。5.4.1數(shù)組的復(fù)制使用Arrays類的copyOf()方法和copyOfRange()方法將一個(gè)數(shù)組中的全部或部分元素拷貝到另一個(gè)數(shù)組中。有10個(gè)重載的copyOf()方法,其中8個(gè)為各基本類型的,2個(gè)為對(duì)象類型的。下面給出幾個(gè)方法的格式。staticboolean[]copyOf(boolean[]original,intnewLength)staticdouble[]copyOf(double[]original,intnewLength)static<T>T[]copyOf(T[]original,intnewLength)下面代碼創(chuàng)建了一個(gè)包含4個(gè)元素的數(shù)組,將numbers的內(nèi)容復(fù)制到它的前三個(gè)元素中。int[]numbers={3,7,9};int[]newArray=Arrays.copyOf(numbers,4);也可以將新數(shù)組重新賦給原來的變量:numbers=Arrays.copyOf(numbers,4);5.4.2數(shù)組的排序使用Arrays的sort()方法可以對(duì)數(shù)組元素排序。對(duì)于基本數(shù)據(jù)類型,按數(shù)據(jù)的升序排序。對(duì)于對(duì)象數(shù)組的排序要求數(shù)組元素的類必須實(shí)現(xiàn)Comparable接口,若要改變排序順序,還可以指定一個(gè)比較器對(duì)象。staticvoidsort(int[]a):對(duì)數(shù)組a按自然順序排序。staticvoidsort(int[]a,intfromIndex,inttoIndex):對(duì)數(shù)組a中的元素從起始下標(biāo)fromIndex到終止下標(biāo)toIndex之間的元素排序。staticvoidsort(Object[]a):對(duì)數(shù)組a按自然順序排序。staticvoidsort(Object[]a,intfromIndex,inttoIndex):對(duì)數(shù)組a中的元素從起始下標(biāo)fromIndex到終止下標(biāo)toIndex之間的元素排序。static<T>voidsort(T[]a,Comparator<?superT>c):使用比較器對(duì)象c對(duì)數(shù)組a排序。例如,下面代碼為double型數(shù)組和char型數(shù)組排序:double[]numbers={5.0,4.4,1.9,2.9,3.8,3.5};java.util.Arrays.sort(numbers);char[]chars={'a','A','4','F','D','&'};java.util.Arrays.sort(chars);下面代碼對(duì)一個(gè)字符串?dāng)?shù)組排序,對(duì)字符串排序是按字符的Unicode碼排序的。String[]ss={"中國(guó)","英國(guó)","法國(guó)","美國(guó)","俄羅斯"};for(vari=0;i<ss.length;i++){System.out.print(ss[i]+"");}System.out.println();Arrays.sort(ss);//對(duì)數(shù)組ss排序for(vars:ss){System.out.print(s+"");}5.4.3元素的查找對(duì)排序后的數(shù)組可以使用binarySearch()方法從中快速查找指定元素,該方法也有多個(gè)重載的方法,下面是對(duì)整型數(shù)組和對(duì)象數(shù)組的查找方法:staticintbinarySearch(int[]a,intkey)staticintbinarySearch(Object[]a,Objectkey)查找方法根據(jù)給定的鍵值,查找該值在數(shù)組中的位置,如果找到指定的值,則返回該值的下標(biāo)值。如果查找的值不包含在數(shù)組中,方法的返回值為(-插入點(diǎn)-1),插入點(diǎn)為指定的值在數(shù)組中應(yīng)該插入的位置。例如,下面代碼輸出結(jié)果為-3:vara=newint[]{1,5,7,3};Arrays.sort(a);//返回a的元素是:1357vari=Arrays.binarySearch(a,4);System.out.println(i);//輸出:-3在已排序的數(shù)組a中查找4,返回的結(jié)果-3(-2-1),它的含義要把4插入到數(shù)組a中,它的下標(biāo)是應(yīng)該2。5.4.4數(shù)組的比較使用Arrays的equals()方法可以比較兩個(gè)數(shù)組,被比較的兩個(gè)數(shù)組要求數(shù)據(jù)類型相同且元素個(gè)數(shù)相同,比較的是對(duì)應(yīng)元素是否相同。對(duì)于引用類型的數(shù)據(jù),如果兩個(gè)對(duì)象e1、e2值都為null或者e1.equals(e2),則認(rèn)為e1與e2相等。下面是布爾型數(shù)組和對(duì)象數(shù)組equals()方法的格式:staticbooleanequals(boolean[]a,boolean[]b)比較布爾型數(shù)組a與b是否相等。staticbooleanequals(Object[]a,Object[]b):比較對(duì)象數(shù)組a與b是否相等。【案例5-4】用Arrays的sort()方法排序數(shù)組?!境绦?-5】SortDemo.java5.4.5填充數(shù)組元素調(diào)用Arrays類的fill()方法可以將一個(gè)值填充到數(shù)組的每個(gè)元素中,也可將一個(gè)值填充到數(shù)組的幾個(gè)連續(xù)元素中。是向整型數(shù)組和對(duì)象數(shù)組中填充元素方法:staticvoidfill(int[]a,intval):填充數(shù)組a中的每個(gè)元素。staticvoidfill(int[]a,intfromIndex,inttoIndex,intval):填充數(shù)組中的下標(biāo)從fromIndex開始到toIndex為止的每個(gè)元素。下面代碼創(chuàng)建一個(gè)整型數(shù)組,然后使用fill()方法為其每個(gè)元素填充一個(gè)兩位隨機(jī)整數(shù)。varintArray=newint[10];for(vari=0;i<intArray.length;i++){varnum=(int)(Math.random()*90)+10;Arrays.fill(intArray,i,i+1,num);}for(vari:intArray)System.out.print(i+"");}5.5案例學(xué)習(xí)——橋牌隨機(jī)發(fā)牌1.問題描述橋牌是一種文明、高雅、競(jìng)技性很強(qiáng)的智力游戲,由4個(gè)人分兩組玩。橋牌使用普通撲克牌去掉大小王后的52張牌,分為梅花(C)、方塊(D)、紅心(H)和黑桃(S)四種花色,每種花色有13張牌,從大到小的順序?yàn)椋篈(最大)、K、Q、J、10、9、8、7、6、5、4、3、2(最小)。打橋牌首先需發(fā)牌。本案例就是通過編程實(shí)現(xiàn)隨機(jī)發(fā)牌。最后,按順序顯示輸出4個(gè)玩家得到的牌。2.設(shè)計(jì)思路(1)可以使用一個(gè)有52個(gè)元素的數(shù)組存儲(chǔ)52張牌。為了區(qū)分52張牌,使用不同的元素值即可,為了方便這里使用0到51。設(shè)元素值從0到12為黑桃,13到25為紅桃,26到38為方塊,39到51為梅花。在創(chuàng)建數(shù)組后為每個(gè)元素賦值,如下所示。int[]deck=newint[52];for(vari=0;i<deck.length;i++)//填充每個(gè)元素deck[i]=i;(2)為實(shí)現(xiàn)隨機(jī)發(fā)牌,需要打亂數(shù)組元素的值,這里對(duì)每個(gè)元素,隨機(jī)生成一個(gè)整數(shù)下標(biāo),將當(dāng)前元素與產(chǎn)生的下標(biāo)的元素交換,循環(huán)結(jié)束后,數(shù)組中的元素值被打亂。for(vari=0;i<deck.length;i++){//隨機(jī)產(chǎn)生一個(gè)元素下標(biāo)0~51intindex=(int)(Math.random()*deck.length);inttemp=deck[i];//將當(dāng)前元素與產(chǎn)生的下標(biāo)的元素交換deck[i]=deck[index];deck[index]=temp;}(3)牌的順序打亂后,四個(gè)玩家的牌依次從52張牌取出13張牌。第1個(gè)13張牌屬于第1個(gè)玩家,第2個(gè)13張牌屬于第2個(gè)玩家,第3個(gè)13張牌屬于第3個(gè)玩家,第4個(gè)13張牌屬于第4個(gè)玩家。最后要求每個(gè)玩家的牌按順序輸出,因此需要對(duì)每個(gè)玩家的牌排序,這里使用Arrays類的sort()方法,它可以對(duì)數(shù)組部分元素排序,比如對(duì)第3個(gè)玩家的牌排序,使用下面代碼。Arrays.sort(deck,26,39);(4)最后根據(jù)每張牌的數(shù)值轉(zhuǎn)換為牌的名稱(如,?K)。為此,定義兩個(gè)String數(shù)組,如下所示。String[]suits={"?","?","?","?"};String[]ranks={"A","K","Q","J","10","9","8","7","6","5","4","3","2"};根據(jù)下面代碼確定每張牌的花色和次序,然后輸出。Stringsuit=suits[deck[i]/13];//確定花色Stringrank=ranks[deck[i]%13];//確定次序System.out.printf("%s%-3s",suit,rank);3.代碼實(shí)現(xiàn)該案例的完整實(shí)現(xiàn)代碼如教材程序5-6所示。采用機(jī)房授課邊講邊練模式,同時(shí)用啟發(fā)式、討論式、案例教學(xué)等教學(xué)方法。布置課外學(xué)習(xí)任務(wù)編程題:教材習(xí)題5.3,5.4,5.5教學(xué)反思《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第14講教學(xué)對(duì)象計(jì)算機(jī)科學(xué)技術(shù)專業(yè)授課內(nèi)容數(shù)組5.6二維數(shù)組5.7案例學(xué)習(xí)——打印10行楊輝三角形5.8案例學(xué)習(xí)——打印輸出魔方數(shù)課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識(shí)目標(biāo)1.了解二維數(shù)組的應(yīng)用2.掌握二維數(shù)組的定義和使用3.了解數(shù)組初始化器4.了解不規(guī)則二維數(shù)組(二)能力目標(biāo)1.通過探究二維數(shù)組的應(yīng)用和使用方法,提高學(xué)生編程能力2.理解軟件開發(fā)的新方法,使用這種方法開發(fā)的軟件具有可復(fù)用、易維護(hù)和可擴(kuò)展等特性教學(xué)方法采用講授法、演示法、討論法、案例教學(xué)。學(xué)時(shí)及分配(第1學(xué)時(shí)50分鐘)課堂講授30分鐘課堂實(shí)踐20分鐘5.6二維數(shù)組5.6.1二維數(shù)組的定義5.6.2數(shù)組元素的使用5.6.3數(shù)組初始化器5.6.4不規(guī)則二維數(shù)組學(xué)時(shí)及分配(第2學(xué)時(shí)50分鐘)課堂講授20分鐘課堂實(shí)踐30分鐘5.7案例學(xué)習(xí)——打印10行楊輝三角形5.8案例學(xué)習(xí)——打印輸出魔方數(shù)知識(shí)點(diǎn)分析重點(diǎn):二維數(shù)組的定義和使用難點(diǎn):不規(guī)則二維數(shù)組的使用教學(xué)過程設(shè)計(jì)內(nèi)容方式問題導(dǎo)入Java語(yǔ)言中數(shù)組元素還可以是一個(gè)數(shù)組,這樣的數(shù)組稱為數(shù)組的數(shù)組或二維數(shù)組。有5名學(xué)生學(xué)年考試成績(jī)?nèi)缦卤硭荆嚎颇?科目2科目3科目48075789367879865867260767680766382709067編寫程序,使用二維數(shù)組存儲(chǔ)學(xué)生成績(jī),并完成下列操作:(1)計(jì)算并輸出每名學(xué)生的總成績(jī)。(2)打印輸出總成績(jī)最高的行號(hào)及總成績(jī)。(3)打印輸出每科最高分及所在行號(hào)。這個(gè)問題就應(yīng)該使用二維數(shù)組實(shí)現(xiàn)。內(nèi)容要點(diǎn)5.6.1二維數(shù)組定義二維數(shù)組的使用也分為聲明、創(chuàng)建兩個(gè)步驟。1.二維數(shù)組聲明二維數(shù)組有下面三種等價(jià)的聲明格式:推薦使用第一種格式元素類型[][]數(shù)組名;推薦使用第一種格式元素類型數(shù)組名[][];元素類型[]數(shù)組名[];這里,元素類型可以是基本類型,也可以是引用類型,數(shù)組名為合法的變量名。推薦使用第一種格式聲明二維數(shù)組。下面語(yǔ)句聲明了一個(gè)整型二維數(shù)組matrix和一個(gè)String型二數(shù)組cities。int[][]matrix;String[][]cities;2.創(chuàng)建二維數(shù)組創(chuàng)建二維數(shù)組就是為二維數(shù)組的每個(gè)元素分配存儲(chǔ)空間。系統(tǒng)先為高維分配引用空間,然后再順次為低維分配空間。二維數(shù)組的創(chuàng)建也使用new運(yùn)算符,分配空間有兩種方法,下面是直接為每一維度分配空間。varmatrix=newint[2][3];//直接為每一維分配空間這種方法適用于數(shù)組的低維具有相同個(gè)數(shù)的數(shù)組元素。在Java中,二維數(shù)組是數(shù)組的數(shù)組,即數(shù)組元素也是一個(gè)數(shù)組。上述語(yǔ)句執(zhí)行后創(chuàng)建的數(shù)組如圖5-11所示,二維數(shù)組matrix有兩個(gè)元素,matrix[0]和matrix[1],它們又都是數(shù)組,各有三個(gè)元素。圖5-11中共有三個(gè)對(duì)象:matrix、matrix[0]和matrix[1]。創(chuàng)建了二維數(shù)組后,它的每個(gè)元素被指定為默認(rèn)值。上述語(yǔ)句執(zhí)行后,數(shù)組matrix的6個(gè)元素值都被初始化為0。在創(chuàng)建二維數(shù)組時(shí),也可以先為第一維分配空間,然后再為第二維分配空間。varmatrix=newint[2][];//先為第一維分配空間matrix[0]=newint[3];//再為第二維分配空間matrix[1]=newint[3];5.6.2數(shù)組元素的使用訪問二維數(shù)組的元素,使用下面的形式:數(shù)組名[下標(biāo)1][下標(biāo)2]其中,下標(biāo)1和下標(biāo)2可以是整型常數(shù)或表達(dá)式。同樣,每一維的下標(biāo)也是從0到該維的長(zhǎng)度減1。下面代碼給matrix數(shù)組元素賦值:matrix[0][0]=80;matrix[0][1]=75;matrix[0][2]=78;matrix[1][0]=67;matrix[1][1]=87;matrix[1][2]=98;下面代碼輸出matrix[1][2]元素值:System.out.println(matrix[1][2]);對(duì)二維數(shù)組的第一維通常稱為行,第二維稱為列。要訪問二維數(shù)組的所有元素,應(yīng)該使用嵌套的for循環(huán)。如下面代碼輸出matrix數(shù)組中所有元素。for(vari=0;i<matrix.length;i++){for(varj=0;j<matrix[0].length;j++){System.out.print(matrix[i][j]+"");}System.out.println();//換行}5.6.3數(shù)組初始化器對(duì)于二維數(shù)組也可以使用初始化器在聲明數(shù)組的同時(shí)為數(shù)組元素初始化,例如:int[][]matrix={{15,56,20,-2},{10,80,-9,31},{76,-3,99,21},};matrix數(shù)組是3行4列的數(shù)組。多維數(shù)組每一維也都有一個(gè)length成員表示數(shù)組的長(zhǎng)度。matrix.length的值是3,matrix[0].length的值是4。5.6.4案例——矩陣乘法問題描述:使用二維數(shù)組計(jì)算兩個(gè)矩陣的乘積。矩陣A乘以矩陣B得到矩陣C,則必須滿足如下要求:1)矩陣A的列數(shù)與矩陣B的行數(shù)相等。2)矩陣C的行數(shù)等于矩陣A的行數(shù),列數(shù)等于矩陣B的列數(shù)。5.6.5不規(guī)則二維數(shù)組Java的二維數(shù)組是數(shù)組的數(shù)組,對(duì)二維數(shù)組聲明時(shí)可以只指定第一維的大小,第二維的每個(gè)元素可以指定不同的大小,例如:varcities=newString[2][];//cities數(shù)組有2個(gè)元素cities[0]=newString[3];//cities[0]數(shù)組有3個(gè)元素cities[1]=newString[2];//cities[1]數(shù)組有2個(gè)元素這種方法適用于低維數(shù)組元素個(gè)數(shù)不同的情況,即每個(gè)數(shù)組的元素個(gè)數(shù)可以不同。對(duì)于引用類型的數(shù)組,除了為數(shù)組分配空間外,還要為每個(gè)數(shù)組元素的對(duì)象分配空間。cities[0][0]=newString("北京");cities[0][1]=newString("上海");cities[0][2]=newString("廣州");cities[1][0]=newString("倫敦");cities[1][1]=newString("紐約");cities數(shù)組元素空間的分配情況如圖5-13所示,圖中共有8個(gè)對(duì)象。5.7案例學(xué)習(xí):打印10行楊輝三角形1.問題描述楊輝三角形,又稱帕斯卡三角形,是中國(guó)古代數(shù)學(xué)的杰出研究成果之一,它把二項(xiàng)式系數(shù)圖形化,把組合數(shù)內(nèi)在的一些代數(shù)性質(zhì)直觀地從圖形中體現(xiàn)出來,是一種離散型的數(shù)與形的結(jié)合。2.設(shè)計(jì)思路根據(jù)問題描述,本案例的設(shè)計(jì)思路如下:(1)楊輝三角形的第n行有n個(gè)數(shù),并且這些數(shù)是有規(guī)律的。可以使用不規(guī)則二維數(shù)組存放楊輝三角形中的數(shù)。(2)第1行只有一個(gè)元素,值為1,從第2行開始,第1個(gè)元素和最后一個(gè)元素值都是1,其他元素值可以根據(jù)上一行元素計(jì)算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論