程式碼會從命令列讀取一個正整數 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 類來處理,並可能需要更複雜的多執行緒同步機制。