本章內容有 1. 輸入與輸出 ---------------------------------------------------------------------------------- p01 2. 數學函數 Math ---------------------------------------------------------------------------------- p07 3. 專案研究 ---------------------------------------------------------------------------------- p16 4. 習題 ---------------------------------------------------------------------------------- p28 13-1 輸入與輸出 整數 Type Size 最小值 最大值 byte 8 bits - 128 127 short 16 bits - 32768 32767 int 32 bits - 2147483648 2147483647 long 64 bits - 9223372036854775808 9223372036854775807 法為 例如, 使用 TextField 輸入整數, 設定 TextField 物件變數為 inputtextfield, 其值為 no1, 語 int no1 = Integer.parseInt(inputTextField.getText()); 上式 inputtextfield.gettext() 語法取得字串型態資料, 透過 Integer.parseInt() 語法將取得的字串轉 換為整數資料型態, 如下圖所示 頁 1
浮點數 Type Size 最小值最大值 float 32 bits 1.4E-45 3.4E38 double 64 bits 4.94E-324 1.79E308 法為 同樣使用 TextField 輸入浮點數, 設定 TextField 物件變數為 inputtextfield, 其值為 no2, 語 int no2 = Float.parseFloat(inputTextField.getText()); 或 int no2 = Double.parseDouble(inputTextField.getText()); 設定 設定變數值 變數 A = 數值 將變數 B 的內容設定給變數 A 變數 A = 變數 B 將等號右邊運算的結果設定給等號左邊的變數 A 變數 A = 運算結果的數值 使用 Label & TextField, 輸入二整數變數, 分別設定為 A B, 計算其加 減 乘 除 餘數, 設計如下圖所示 頁 2
頁 3
行號 5: 因為使用 awt 套件, 因此 extends 繼承 Applet 即可行號 7: 宣告 TextField 物件變數 no1 no2 行號 8: 宣告文字標籤物件變數 title1 title2 行號 30~39:TextField 物件的事件處理方法, 其中使用 Integer.parseInt() 語法取得整數數值 自行測試 ( 提醒注意 : 只能輸入整數數值 ) 續範例 1, 改為輸入 double 浮點數值, 設計如下圖所示 ( 参考檔案 CalDouble) 使用繼承語法, 被繼承類別為 Calcs 類別, 輸入二浮點數變數, 分別設定為 A B, 頁 4
計算其加 減 乘 除 餘數, 設計如下圖所示 頁 5
頁 6
行號 7: 因為使用 Swing 套件, 因此必須 extends 繼承 JApplet, 而非繼承 Applet 行號 8: 宣告容器物件變數 c, 使能放置 Swing 物件 行號 9: 宣告自定面板, 用來顯示加 減 乘 除運算的結果 行號 12: 宣告類別物件變數 mysimplecal 行號 45~56:TextField 物件的事件處理方法, 其中使用 Float.parseFloat() 語法取得浮點數數值 行號 74~76: 使用繼承語法,SimpleCal 物件變數繼承 Calcs 類別 請自行編譯與執行 有關 Swing 物件將, 在第 15 章詳細討論, 在此只要瞭解與 AWT 物件的差別即可 續範例 2, 練習去除自定面板 13-2 數學函數 Math 數學函數庫, 並不需要在程式的開頭 import, 但是必須以 Math. 運算子取用, 如下表所示 頁 7
Math.abs(x) Math.acos(x) Math.asin(x) Math.atan(x) Math.ceil(x) Math.cos(x) Math.exp(x) Math.floor(x) Math.log(x) Math.max(x,y) Math.min(x,y) Math.pow(x,y) Math.random() Math.round(x) Math.sin(x) Math.sqrt(x) Math.tan(x) Math.toDegrees(x) Math.toRadians(x) 傳回 x 的絕對值 x : int, long, float, double 型態傳回 x 的反餘弦傳回 x 的反正弦傳回 x 的反正切傳回大於或等於 x 的最小整數傳回 x 的餘弦傳回自然數的 x 次方傳回小於或等於 x 的最大整數傳回 x 的自然對數傳回 x,y 中較大者傳回 x,y 中較小者傳回 x 的 y 次方傳回介於 0 ~ 1 之間的隨機值傳回最接近 x 的整數傳回 x 的正弦傳回 x 的平方根傳回 x 的正切將徑 x 轉換成度傳回將度 x 轉換成徑傳回 Math.PI 3.14159265 Math.E e 例如, 呼叫三角函數 :sin(x),cos(x) 與 tan(x) 以 cos(x) 為例, 畫出函數圖, 如下所示 頁 8
程式碼 : 請注意行號 13, 因為螢幕左上角為 (0, 0), 換言之,y 軸愈往下愈大, 因此使用減法另外, 還有三個三角函數 :cot(x),sec(x) 與 csc(x),math 類別沒有提供, 因此必須變換處理 Math.pow(tan(x), -1) Math.pow(cos(x), -1) Math.pow(sin(x), -1) 使用 Math.Max() 與 Math.Min() 語法,Swing 互動輸入, 輸入三個數字, 比較其最大 與最小者, 設計如下圖所示 頁 9
頁 10
行號 27: 使用 Math.max() 語法, 呼叫兩次, 進行三數比大的動作 行號 28: 使用 Math.min() 語法, 呼叫兩次, 進行三數比小的動作 頁 11
計如下圖所示 使用陣列與 Math 語法, 直接設定 3 浮點數, 比較其最大與最小值, 並且印出, 設 使用 Swing 互動輸入, 輸入餘弦的振幅與週期數, 畫餘弦函數, 設計如下圖所示 頁 12
applet 視窗大小的高為 200 像素, 可見垂直方向的中央在 y = 100, 程式中 y = (int)(amp - (amp * Math.cos(period*x/57.3))); 的語法可以改為 y = 100 為基準, 例如 y = 100 - (int)(amp * Math.cos(period*x/57.3)); 按 open 檔案 :FirstCosY.htm 與 FirstCosY.java,FirstCosY.java 編譯成功後, 再按 執行 頁 13
畫正弦函數 sin(x), 設計如下圖所示 畫正切函數 tan(x), 設計如下圖所示 使用 Math & Class 語法, 亂數輸入角度, 計算 cotθ cotθ cotθ, 並且印出數值, 頁 14
設計如下圖所示 行號 26~28: 使用 Math.tan() 倒數的語法, 即 Math.pow(Math.tan(), -1), 取得 cot(x) 數值 頁 15
行號 29~31: 使用 Math.cos() 倒數的語法, 即 Math.pow(Math.cos(), -1), 取得 sec(x) 數值 行號 32~34: 使用 Math.sin() 倒數的語法, 即 Math.pow(Math.sin(), -1), 取得 csc(x) 數值 按 open 檔案 :TriangleClass.htm 與 TriangleClass.java,TriangleClass.java 編譯成功後, 再按 執行 資料夾中會有一個.class 檔 :Class MyTriangle 有此類別, 以後只要繼承之後, 即可直接呼叫使用 Math 類別中所沒提供的另外三個三角函數 13-3 專案研究 Scaling 函數 f(x) 的對應值, 必須轉換成螢幕上值, 此種轉換稱為 Scaling; 例如,-5 x 5, 頁 16
若將 x 值代入, 假設 y 值的最大與最小為 -5 y 5, 而螢幕設定為 width = 400,height = 400, 則 x 與 y 的 Scaling 為 實際值 螢幕上範圍的 Scaling x 軸 5 - ( -5 ) = 10 10 : 400 = 1 : 40 y 軸 5 - ( -5 ) = 10 10 : 400 = 1 : 40 將上述概念轉換成二維圖表, 輸出如下圖所示 頁 17
頁 18
使用 class 語法, 將二維圖表轉換成類別 頁 19
頁 20
使用 Swing 互動輸入,,-5 x 5, 輸出如下 圖所示 頁 21
頁 22
行號 56: 呼叫圖表方法 graph(), 傳入五個参數, 繪出圖表 x y 軸範圍 頁 23
行號 60: 呼叫方程式方法 thefunction(), 傳入五個参數 行號 62~72: 判斷螢幕的 y 值 wy 是否在預設的範圍內, 若是並且是第一點, 則畫出點, 其餘 則連線處理 行號 84~87: 定義函數方程式 按 open 檔案 :PolyFc.htm 與 PolyFc.java,PolyFc.java 編譯成功後, 再按 執行 頁 24
使用 Swing 互動輸入, 輸入正弦的振幅與週期數, 畫正弦函數, 如下圖所示 頁 25
頁 26
行號 40: 呼叫圖表方法 graph(), 傳入五個参數, 繪出圖表 x y 軸範圍 行號 45: 呼叫方程式方法 thefunction(), 傳入三個参數 行號 47~57: 判斷螢幕的 y 值 wy 是否在預設的範圍內, 若是並且是第一點, 則畫出點, 其餘 則連線處理 行號 68~71: 定義 sin(x) 函數方程式 按 open 檔案 :SinFc.htm 與 SinFc.java,SinFc.java 編譯成功後, 再按 執行 頁 27
13-4 習題 1. 使用 Math.pow( ) 語法, 輸入起始值 步進值 終止值, 計算平方和, 畫面如下圖所示 2. 使用 Math.Max() 與 Math.Min() 語法,TextField 輸入三個數字, 比較其最大與最小者, 如下圖所示 3. 使用 Button & 繼承 Class 語法, 畫出六個三角函數的簡易圖, 設計如下圖所示 頁 28
頁 29