阿摩線上測驗 登入

申論題資訊

試卷:103年 - 103年專門職業及技術人員高等建築師、技師、第二次食品技師暨普通不動產經紀人、記帳士考高等_資訊技師#29113
科目:程式設計
年份:103年
排序:0

申論題內容

四、Java 語言提供執行緒。試設計一個 Java 程式碼,由命令列輸入一個正整數 n,產生 一個執行緒,用來計算出 1*2*…*n = n!的乘積,並由主程式將最後的乘積輸出。 (20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
程式碼會從命令列讀取一個正整數 n,然後創建一個新的執行緒來計算 n!(n 的階乘),並在主執行緒中輸出計算結果。
java
Copy code
public class FactorialThread extends Thread {
    private int number;
    private long factorialResult = 1;
    public FactorialThread(int number) {
        this.number = number;
    }
    public void run() {
        factorialResult = calculateFactorial(number);
        System.out.println("計算完成");
    }
    public long getFactorialResult() {
        return factorialResult;
    }
    private long calculateFactorial(int n) {
        long result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }
    public static void main(String[] args) {
        if (args.length > 0) {
            try {
                int n = Integer.parseInt(args[0]);
                if (n >= 0) {
                    FactorialThread thread = new FactorialThread(n);
                    thread.start();
                    thread.join(); // 等待計算執行緒結束
                    System.out.println("1*2*...*" + n + " = " + thread.getFactorialResult());
                } else {
                    System.out.println("請輸入一個正整數。");
                }
            } catch (NumberFormatException e) {
                System.out.println("請確保命令列參數是一個整數。");
            } catch (InterruptedException e) {
                System.out.println("執行緒被中斷。");
            }
        } else {
            System.out.println("請輸入一個正整數作為命令列參數。");
        }
    }
}
在上面的程式碼中,FactorialThread 繼承自 Thread 類。當 FactorialThread 的實例被創建並啟動時,它會在自己的 run 方法中計算階乘。在主方法 main 中,程式會檢查用戶是否通過命令列參數提供了一個正整數,然後創建和啟動執行緒,並等待執行緒完成計算。完成後,主執行緒會輸出結果。
要運行這個程式,您需要將它保存到一個 .java 檔中,例如 FactorialThread.java,然後編譯並從命令列執行,傳入一個整數參數:

javac FactorialThread.java
java FactorialThread 5
這將會計算 5! 的值並輸出結果。注意,這個程式碼假設輸入的數字不會太大,以免超出 long 型別的最大值。對於非常大的整數,可能需要使用 BigInteger 類來處理,並可能需要更複雜的多執行緒同步機制。