面向對象-教案(第13講)java.util.Arrays類;(第14講)二維數組_第1頁
面向對象-教案(第13講)java.util.Arrays類;(第14講)二維數組_第2頁
面向對象-教案(第13講)java.util.Arrays類;(第14講)二維數組_第3頁
面向對象-教案(第13講)java.util.Arrays類;(第14講)二維數組_第4頁
面向對象-教案(第13講)java.util.Arrays類;(第14講)二維數組_第5頁
已閱讀5頁,還剩7頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論