2008年1月11日 星期五

lab recursive method

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

Java 96-1 期末報告

到圖書館挑選三本Java課本,寫下這些書名與作者出版社與出版日期,每本書各挑選一個習題進行個人研究,說明以下
  • 你為什麼挑選這個習題(只有題目,沒有範例或解答),
  • 這個習題讓你學到什麼概念,
  • 請你製作一個講義說明這個習題。

Due: 1/11/2008 at 18:00

參考書:


























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

















心得:
到底是〝和氣→生財〞,還是〝財生→氣和〞呢?
一個是理想面;一個是現實面。

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,因此每個數字出現的機率近乎相同。

心得:
這個程式大略呈現,電腦隨機產生數字的機率分布。但畢竟是機率,所以看似均勻的分布中,還是會有可能存在極端分布的情形。

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輸,由此程式可得知。

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.

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.