Java 入門指南 - 繼續測試

軟體生命週期 (sofeware life cycle) 分成三大階段,開發 (development) 、使用 (use) 、修改 (modification) ,接下來便是使用、修改的無限循環




開發階段,自然免不了對需求的分析 (analysis) ,然後設計 (design) 、建置 (implement) ,接著進行測試 (testing) ,其實這順序沒有絕對,「設計」與「建置」可能只是先做個簡單版本,「測試」與「使用」說到底都是實際執行後觀察結果,「修改」等於以之前的基礎再次「設計」與重新「建置」。


我們打算開發的 Encrypt 類別 (class) 的需求已經很清楚,也就是產生一個英文小寫字母對換的陣列 (array) ,我們用 cArray 屬性 (field) 當作對這個陣列的參考 (reference) ,然後以 setArray() 方法 (method) 建立這個陣列。


我們現在正式來寫 Encrypt ,利用 API 中 Math 類別 random() 方法可以得到小於 0 隨機浮點數,我們將其乘以 10 ,然後強制轉換型態為 int ,便可使 a 與 b 得到 0 到 9 的隨幾整數
public class Encrypt {
    char[] cArray = new char[26];
    // a 與 b 取得 0 到 9 的隨機整數值
    int a = (int) (Math.random() * 10);
    int b = (int) (Math.random() * 10);
    int n = 26;    
    char c = 'a';  
    int diff = 97; 
    
    public void setArray() {
        int i, y, x, m;
        char r;
        
        x = c; 
        for (i = 0; i < n; i++) {
            y = x * a + b;
            m = y % n;
            r = (char) (m + diff);
            cArray[i] = r; 
            x++; 
        }        
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:Encrypt.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


Math 中的 random() 也是 static 的,所以我們得由類別名稱 Math 來呼叫 (call) 。 Encrypt 中沒有寫 main() ,這是因為我們要把 main() 寫在另一個 EncryptDemo 類別中,由 EncryptDemo 來進行 Encrypt 的測試。那,總之 Encrypt 需要先編譯



命令列 (command line) 中打入編譯 (compile) 指令,無聲無息的出現下一個打指令的提示字元,這就表示我們編譯成功。那現在我們就來寫 EncryptDemo 囉
// 測試 Encrypt 的類別
public class EncryptDemo {
    public static void main(String[] args) {
        System.out.println();
        Encrypt t = new Encrypt();
        t.setArray();
        System.out.println(t.cArray);
        System.out.println();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:EncryptDemo.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


編譯後執行,如下



嗯,看起來還不錯。接下來,我們在 EncryptDemo 中加入迴圈 (loop) ,跑十六個表格出來看看,這樣的話, EncryptDemo 需要修改如下
// 測試 Encrypt 的類別
public class EncryptDemo {
    public static void main(String[] args) {
        System.out.println();
        // 印 16 次表格
        for (int i = 0; i < 16; i++) {
            Encrypt t = new Encrypt();
            t.setArray();
            System.out.println(t.cArray);
        }
        System.out.println();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:EncryptDemo.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


記得, EncryptDemo 修改後需要重新編譯,而 Encrypt 目前沒問題,不用去動它



咦,居然有一行全部都是英文小寫字母 'e' ,有幾行的英文字母重複出現,這代表轉換公式有問題,我們接下來需要先修正數學公式


中英文術語對照
軟體生命週期sofeware life cycle
開發development
使用use
修改modification
分析analysis
設計design
建置implement
測試testing
類別class
陣列array
屬性field
參考reference
方法method
呼叫call
命令列command line
編譯compile
迴圈loop


您可以繼續參考
軟體開發


相關目錄
回 Java 入門指南
回 Java 教材目錄
回首頁


參考資料
The JavaTM Tutorials: Getting Started
The JavaTM Tutorials: Learning the Java Language
The JavaTM Tutorials: Essential Classes
The Java Language Specification, Third Edition


本文於 2013 年 1 月訂正

沒有留言: