Write a recursive method to compute Fibonacci series.
Hint:
fib(n)=fib(n-1)+fib(n-2)
1.main
2.
( 修正)
1. 把Fabonacci() 改為 static。
2.
因為就軟體工程的角度而言,第一個寫法用fab來呼叫Fabonacci(),但fab的意義為何?很難理解,因此可能會導致團隊其他的程式設計師誤用、或不知道如何呼叫Fabonacci()。
改用static,就很明顯可知,如果要使用Fabonacci(),用Class Recursion即可呼叫出來。
Other example: BackwardWriting
2008年1月11日 星期五
BackwardWriting
參考課本: JBuilder 程式實務設計作者:楊宗誌。出版社: 文魁資訊股份有限公司。
出版日期: 2001年 12月。
題目:
寫一個程式,讓使用者輸入一字串,然後將此字串內容反順序列印出來。(例如輸入"Java",則列印 "vavJ")
1.
每一個Backward() method 都要做
(1)傳入扣除第一個字元的字串給Backward()的程序。
(除非字串為"空字串",就不用作)
(2)回傳第一個字元的程序。
※順序為先做(1)再做(2)。
recursion 的情形,其實就是因為在做method aa()第1個程序時,就執行下一個 method bb(),因此要再回頭做第2個程序時,必須要等到,做完目前method bb()的程序。
因此讓人有"Go & Back"的感覺。
以本題為例,
第一個Backward("和氣生財") 還沒做完,就再做第二個method Backward("氣生財");回傳"和"的程序就先放著。
第二個Backward("氣生財") 還沒做完,就再做第三個method Backward("生財");回傳"氣"的程序就先放著。
第三個Backward("生財") 還沒做完,就再做第四個method Backward("財");回傳"生"的程序就先放著。
第四個Backward("財") 還沒做完,就再做第五個method Backward(" ");回傳"財"的程序就先放著。
此時,
第五個method( )完成,就再回到第四個method() "補"作回傳"財"的程序。
第四個method( )完成,就再回到第三個method() "補"作回傳"生"的程序。
第三個method( )完成,就再回到第二個method() "補"作回傳"氣"的程序。
第二個method( )完成,就再回到第一個method() "補"作回傳"和"的程序。
第一個method( )完成。
2.main
心得:
到底是〝和氣→生財〞,還是〝財生→氣和〞呢?
一個是理想面;一個是現實面。
出版日期: 2001年 12月。
題目:
寫一個程式,讓使用者輸入一字串,然後將此字串內容反順序列印出來。(例如輸入"Java",則列印 "vavJ")
1.
每一個Backward() method 都要做
(1)傳入扣除第一個字元的字串給Backward()的程序。
(除非字串為"空字串",就不用作)
(2)回傳第一個字元的程序。
※順序為先做(1)再做(2)。
recursion 的情形,其實就是因為在做method aa()第1個程序時,就執行下一個 method bb(),因此要再回頭做第2個程序時,必須要等到,做完目前method bb()的程序。
因此讓人有"Go & Back"的感覺。
以本題為例,
第一個Backward("和氣生財") 還沒做完,就再做第二個method Backward("氣生財");回傳"和"的程序就先放著。
第二個Backward("氣生財") 還沒做完,就再做第三個method Backward("生財");回傳"氣"的程序就先放著。
第三個Backward("生財") 還沒做完,就再做第四個method Backward("財");回傳"生"的程序就先放著。
第四個Backward("財") 還沒做完,就再做第五個method Backward(" ");回傳"財"的程序就先放著。
此時,
第五個method( )完成,就再回到第四個method() "補"作回傳"財"的程序。
第四個method( )完成,就再回到第三個method() "補"作回傳"生"的程序。
第三個method( )完成,就再回到第二個method() "補"作回傳"氣"的程序。
第二個method( )完成,就再回到第一個method() "補"作回傳"和"的程序。
第一個method( )完成。
2.main
心得:
到底是〝和氣→生財〞,還是〝財生→氣和〞呢?
一個是理想面;一個是現實面。
2008年1月10日 星期四
Testing Random Generator
參考書: Java程式設計 (Java for Students)
作者: Douglas Bell . Mike Parr
出版社: PEARSON
出版日期: 2007年 7月
題目: 檢查亂數產生器
檢查亂數產生器類別 (第6章) 是否真的能隨機產生數字。請在程式中建立可產生亂數的方法,亂數範圍從 1 至 100。呼叫此方法 100 次,然後將數字出現的頻率儲存在陣列中。最後,再顯示頻率的長條圖。如果亂數產生器可隨機產生數字,長條圖中的每列長條高度應該十分相近。
1.main
(1) 定義一個陣列 array[31]
(2) 隨機產生的數字各自存入其 array
Ex: 3 存到 array[3], 5 存到 array[5]
(3) array[0] 用在找出 1 ~ 30 中出現的最大次數。
(4)再用 array[0] 依序和所有數字做比較,等於者可以產生一個"^"符號,否則產生一個"空白"。
2.main
3.取5個執行結果作分析。
執行結果
(1) "298次"為共同次數
(2) "300次"為共同次數
(3) "299次"為共同次數
(4) "305次" 為共同次數
(5) "298次" 為共同次數
從分布圖也可以約略看出,在任意產生10000個數字中,每個數字共同出現的次數加總可以達9000次左右,接近10000,因此每個數字出現的機率近乎相同。
心得:
這個程式大略呈現,電腦隨機產生數字的機率分布。但畢竟是機率,所以看似均勻的分布中,還是會有可能存在極端分布的情形。
作者: Douglas Bell . Mike Parr
出版社: PEARSON
出版日期: 2007年 7月
題目: 檢查亂數產生器
檢查亂數產生器類別 (第6章) 是否真的能隨機產生數字。請在程式中建立可產生亂數的方法,亂數範圍從 1 至 100。呼叫此方法 100 次,然後將數字出現的頻率儲存在陣列中。最後,再顯示頻率的長條圖。如果亂數產生器可隨機產生數字,長條圖中的每列長條高度應該十分相近。
1.main
(1) 定義一個陣列 array[31]
(2) 隨機產生的數字各自存入其 array
Ex: 3 存到 array[3], 5 存到 array[5]
(3) array[0] 用在找出 1 ~ 30 中出現的最大次數。
(4)再用 array[0] 依序和所有數字做比較,等於者可以產生一個"^"符號,否則產生一個"空白"。
2.main
3.取5個執行結果作分析。
執行結果
(1) "298次"為共同次數
(2) "300次"為共同次數
(3) "299次"為共同次數
(4) "305次" 為共同次數
(5) "298次" 為共同次數
從分布圖也可以約略看出,在任意產生10000個數字中,每個數字共同出現的次數加總可以達9000次左右,接近10000,因此每個數字出現的機率近乎相同。
心得:
這個程式大略呈現,電腦隨機產生數字的機率分布。但畢竟是機率,所以看似均勻的分布中,還是會有可能存在極端分布的情形。
Gamble
參考書: JBuilder X
作者:洪國勝、張建原 編著。
出版社: 文魁資訊股份有限公司。
出版日期:2004年 2月
題目:
請寫一個擲骰子的程式,規則如下:
(1)由電腦擲三顆骰子,並由骰子的點數分佈,沒入或賠償使用者的籌碼,例如使用者的總籌碼有10000元,押100元於1,押200元於4,但電腦出現骰子的點數分佈為4,4,5,則沒入100元,但賠償使用者400元,所以使用者籌碼應變為10300元。
(2)若使用者每次都各押6個點數為100元,連續10000次後,使用者原來的10000元會變為多少?
(3)請將步驟(2)重複執行1000次 ,計算每次的餘額平均,其平均數除以10000即為期望值,此期望值為何?
1.main
2.main
3.Class Banker
4.Class gambler
5.Gambler2
6.Gambler3
7.期望值理論
8.執行結果(1)
9.執行結果(2)
心得:
正所謂10賭9輸,由此程式可得知。
作者:洪國勝、張建原 編著。
出版社: 文魁資訊股份有限公司。
出版日期:2004年 2月
題目:
請寫一個擲骰子的程式,規則如下:
(1)由電腦擲三顆骰子,並由骰子的點數分佈,沒入或賠償使用者的籌碼,例如使用者的總籌碼有10000元,押100元於1,押200元於4,但電腦出現骰子的點數分佈為4,4,5,則沒入100元,但賠償使用者400元,所以使用者籌碼應變為10300元。
(2)若使用者每次都各押6個點數為100元,連續10000次後,使用者原來的10000元會變為多少?
(3)請將步驟(2)重複執行1000次 ,計算每次的餘額平均,其平均數除以10000即為期望值,此期望值為何?
1.main
2.main
3.Class Banker
4.Class gambler
5.Gambler2
6.Gambler3
7.期望值理論
8.執行結果(1)
9.執行結果(2)
心得:
正所謂10賭9輸,由此程式可得知。
2008年1月4日 星期五
Lab Array
Study Display 6.1, and then write a program that can sort numbers in ascending order.
1.BubbleSort
2.SystemIO
3.AdvanceBubbleSort
4.Running by AdvancedBubbleSort
迴圈只要執行 4 + 3 + 2 + 1 = 10 次
5.Running by BubbleSort
迴圈需要執行 4* 4 = 16 次
細說分明:
BubbleSort:
1.
2.
3.AdvancedBubbleSort
驗證理論 by 程式:
1.BubbleSort
2.
3.AdvancedBubbleSort
4.
1.BubbleSort
2.SystemIO
3.AdvanceBubbleSort
4.Running by AdvancedBubbleSort
迴圈只要執行 4 + 3 + 2 + 1 = 10 次
5.Running by BubbleSort
迴圈需要執行 4* 4 = 16 次
細說分明:
BubbleSort:
1.
2.
3.AdvancedBubbleSort
驗證理論 by 程式:
1.BubbleSort
2.
3.AdvancedBubbleSort
4.
Lab Magic Parking Tower
A parking tower is out of order someday. If you park a Benz, you will end up with a Torben. Write a program to simulate this scenario. First create a class called CarParked which has a method called outOfOrder. Name an object called yourCar, which happens to be a Benz. Your program should contain a class called CarParked and a test program called CarParkedDemo.
1.
(附) toString 用為將最後的輸出型態轉為 String。
故,brand 已為 String 型態,所以再用 toString 做轉換輸出,不好。
2.
(改進版)
1.
2.
1.
(附) toString 用為將最後的輸出型態轉為 String。
故,brand 已為 String 型態,所以再用 toString 做轉換輸出,不好。
2.
(改進版)
1.
2.
訂閱:
文章 (Atom)