宣告在for回圈中的变数.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
宣告在for回圈中的变数

* 河內之塔遊戲 (Hanoi Tower) HanoiTowerGame 類別的 go() 方法會呼叫 hanoiTower()方法來解決河內之塔問題, 為了簡化說明起見, 這裡顯示的是僅有 3 個碟子的執行結果。 hanoiTower() 方法就依循了之前所提出的解題概念, 先看看是否僅有 1 個碟子, 如果是就直接搬動;否則, 就遞迴先將最大的碟子之上的碟子都先搬走, 再將最大的碟子搬到目的地, 然後再將先前搬走的碟子搬到目的地。 * 河內之塔遊戲 (Hanoi Tower) moveDisc() 方法就是實際搬碟子的動作, 此處是以顯示訊息來表示。 透過遞迴的技巧, 寫起程式來不但簡單, 而且也和我們解題的思考方式一致, 迅速的解決了問題。 * 方法的多重定義 (Overloading) * 方法的多重定義 (Overloading) 在第 9 ~ 12 行中, 分別傳入 int、double、String、boolean 型別的參數呼叫 System.out.println(), 都可以正常編譯。 這個方法的參數怎麼會這麼神奇, 可以同時是多種型別呢?在這一節中就要討論讓 System.out.println() 方法具有此項能力的機制 - 多重定義。 * 8-4-1 定義同名方法 由於實際在撰寫程式時, 常常會遇到類似意義的動作, 但因為處理的對象型別不一樣而有差異的狀況。因此, Java 允許您在同一個類別中, 定義參數個數或是型別不同的同名方法, 稱為多重定義 (Overloading)。 其實 Java 並不僅只是以『名稱』來辨識方法, 當 Java 編譯程式時, 也會將參數型別、參數數量等資訊, 都一併加到方法的簽名 (Method Signature)。當我們呼叫方法時, Java 就會依據方法簽名, 找出正確的方法。 * 定義同名方法 請看看這個例子。為了要撰寫一個計算矩形的方法, 我們常常會苦惱於要以長、寬來表示矩形, 還是要以左上角及右下角的座標來表示。若是採用多重定義的方式, 就可分別為不同的矩形表示法撰寫其適用的版本, 這樣不論是使用長寬還是座標都可以計算出面積。 * * 定義同名方法 * 定義同名方法 這個程式在 Test 類別中定義了兩個同名的方法, 分別使用寬高以及座標的方式來描述矩形, 而兩個方法都傳回計算所得的面積。在 main() 方法中, 就利用不同的參數分別呼叫了這兩個版本的同名方法。 * 8-4-2 多重定義方法時的注意事項 在使用多重定義時, 有幾點是必須要注意的: 要讓同名方法有不同的簽名, 一定要讓參數型別或數量不同。不管是參數數量不同;或是參數數量相同, 但至少有一個參數型別不同, 都可讓編譯器為方法產生不同的簽名。而在呼叫方法時, Java 也能依簽名找出正確的版本。 參數的名稱及傳回值型別, 都不會是簽名的一部份。所以當類別中兩個方法的參數型別及數量完全相同時, 就算參數名稱或傳回值型別不同, 也會因簽名相同, 而產生編譯錯誤。 * 8-5-1 求乘方 許多數學問題都可以使用遞迴的觀念來定義, 除了之前已經看過的階乘以外, 求算乘方也一樣適用。x y 可以定義如下: 8-5 綜合演練 * 求乘方 寫成程式就如下: * 求乘方 * 8-5-2 Fibonacci 數列 數學上還有一個有趣的數列, 稱為 Fibonacci 數列, 這個數列的定義是這樣的: 所以 Fibonacci 數列就是1,1,2,3,5,8,13,21,.....。 看到了嗎?這又是一個遞迴的定義。要依據這樣的定義寫出程式是很簡單的, 請看: * Fibonacci 數列 * Fibonacci 數列 * 8-5-3 快速排序法 (Quick Sort ) 在第 7 章曾經介紹過使用氣泡排序法來為陣列元素排序, 在這一節中我們要以遞迴的技巧來排序, 介紹快速排序法。 快速排序法的想法是這樣的, 如果能夠把陣列安排成兩段, 前段的元素都比後段的元素小, 那麼接下來就可以把兩段元素看成是兩個單獨的陣列,只要將前後兩段分別排好序, 就等於整個陣列排好序了。 前後兩段的排序自然可以再遞迴套用快速排序法, 分解下去到每一段只有 1 個元素時, 自然就不需要排序。 * 快速排序法 (Quick Sort ) 現在的問題就在於如何才能把陣列安排為 2 段, 而且前一段的元素會比後一段的元素都小?這裡採用一個很簡單的作法: 首先找出陣列中間的元素, 記住它的值。 從陣列的頭往尾端搜尋, 當遇到一個比中間元素還大的元素就先停住。 從陣列的尾端往頭搜尋, 當遇到一個比中間元素還小的元素時就先停住。 將第 2 與第 3 步驟找到的元素互換。 * 快速排序法 (Quic

文档评论(0)

wumanduo11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档