Java程式設計那些事兒39 流程控制綜合示例1

2021-04-23 17:58:11 字數 2610 閱讀 9955

5.6 綜合示例

在一般的學校學習流程控制時,重點是放在流程控制的相關語法,其實為了能成為乙個合格的程式設計師,僅僅學好語法是遠遠不夠的,還需要通過大量的練習來適應程式語言的思維方式,並且熟練地把自己的解決問題的步驟形成**,這些都需要通過大量的閱讀**和編寫**來實現。

所以在學習流程控制時,重點是解決實際的問題,而不是僅僅停留在語法層面上,這個是很多在校學生學習程式時最突出的乙個問題。

在遇到乙個實際問題時,首先要能夠思考出解決這個問題的數學步驟或邏輯步驟,然後才能編寫對應的 **,所以遇到實際問題是,一定要積極思考,並且善於思考,對於乙個相同的問題,不同的邏輯就可以寫出不同的**,所以在思考解決問題的方式時,需要進行 發散性的思維,而這些理性的思維很多都是建立在數學基礎以及對語法的熟悉基礎之上。

下面,通過一系列的實際問題,來說明解決實際問題的步驟以及書寫的對應的**。

5.6.1 示例講解

5.6.1.1 最大公約數

問題:求兩個自然數的最大公約數。

這兩個都是基礎的數學問題,最大公約數指兩個數字公共的約數中最大的,例如數字6的約數有1、2、3、6,數字9的約數有1、3、9,則數字6和數字9的公共約數有1和3,其中3是最大的公約數。

第一種思路:從1開始迴圈,每次把符合要求(即同時是兩個數字的約數)的值都儲存起來,那麼最後乙個儲存起來的就是最大的約數。

則實現的**如下:

int n = 6;

int m = 9;

int result = 1;

for(int i = 1;i <= n;i++)

}system.out.println(result);

使用該思路,每次都儲存得到的公共約數,那麼最後乙個儲存的就是兩個數字的最大公約數。

第二種思路:從兩個數字中最小的數字開始迴圈,每次減1,那麼第一次得到的公共約數就是所求的最大公約數。

則實現的**如下:

int n = 6;

int m = 9;

int result = n > m ?m : n;

for(int i = result;i >= 1;i--)

}system.out.println(result);

當然,解決這個問題,還有很多其它的方法,這裡演示的這兩種實現只是最自然的實現而已,採用類似的原理也可以求兩個數字的最小公倍數的結構。

5.6.1.2 百元百雞問題

問題描述:每只母雞3元,每只公雞4元,每只小雞0.5元,如果花100元錢買100隻雞,請問有哪些可能?說明:每種雞的數量都可以為零。

其實這個問題是數學上的組合問題,只需要把所有的情況列舉出來,然後來判斷是否符合要求即可。這樣的重複列舉的問題,在程式上可以使用迴圈進行解決。

第一種思路:當母雞的數量為0時,公雞的數量從0-100,當公雞的數量每變化一次,小雞的數量就從0變化到100,使用如下數值組合來描述這個思路:

母雞數量

公雞數量

小雞數量

0                                               0                                   從0變化到100

0                                               1                                   從0變化到100

0                                               2                                   從0變化到100

……1                                               0               從0變化到100

1                                               1                                   從0變化到100

……100                                     100                              100

上面列舉出了所有公雞、母雞和小雞的數量都是0-100時的所有組合,總計是101的三次方種,這樣的窮舉結構直接存在巢狀,在程式實際實現時,通過迴圈之間的巢狀就可以實現,則實現的**如下:

for(int i = 0;i <= 100;i++)}}

}按照for語句的執行流程,迴圈變數變化1,則內部的迴圈執行一次,而在迴圈巢狀時,迴圈體又是乙個新的迴圈,則該迴圈執行完成的一組迴圈。這裡通過迴圈的巢狀實現了所有數值的窮舉。在迴圈的內部,只需要按照題目要求判斷一下數量和金額是否符合要求即可。

但是這樣的**效率比較差,可以通過簡單的優化來提高程式的執行效率。

第二種思路:由於母雞每只的金額是3元,所以100元最多購買的母雞數量是100/3=33只,同理100元最多購買的公雞數量是25只,而按照100元100只的要求,小雞的數量應該為100減去公雞和母雞的數量,這樣**就可以簡化為如下的結構:

for(int i = 0;i <= 33;i++)}}

}這樣,就可以大幅提高程式的執行效率,從而提高程式的執行速度。當然該**還可以繼續進行優化,那樣可以再次提供程式的執行效率。

Java程式設計那些事兒 如何學好程式設計

俗話說 興趣是最好的老師 但是只靠興趣是遠遠不夠的,還需要付出艱辛的努力。程式設計是一種技能,需要在較短的時間內學會,就不能像學習漢語一樣,通過十幾年甚至更長的時間來學好,也不能像英語那樣進行業餘學習,以至很多大學畢業的人英語水平也不敢恭維,也達不到實用的程度。那麼如何學好程式設計呢?或者更現實一點...

程式語言那些事兒

開發工具 入門 c 初級開發師 基本資料型別 引用資料型別 常量 變數 表示式 運算子 順序 分支 迴圈 i oc 中級開發師 命名空間 程式設計思想 量化你的思維 流程圖 偽 功能劃分 模組劃分 db設計 sys設計 函式思想 重用 i o 重構 物件導向的思想 物件陣列 物件指標 友元函式和友元...

Java程式設計那些事兒36 do while語句語法

5.4.2 do while語句 do while語句由關鍵字do和while組成,是迴圈語句中最典型的 先迴圈再判斷 的流程控制結構,這個和其它2個迴圈語句都不相同。do while語句的語法格式為 dowhile 迴圈條件 語法說明 在do while語句中,迴圈體部分是重複執行的 部分,迴圈條...