请帮我重写一下上面这段代码
时间: 2024-10-08 07:03:36 浏览: 28
当然,我可以帮你简化这段代码,使其更易于理解和维护。以下是重构后的版本:
```java
import java.util.Arrays;
class FibonacciCalculator implements Runnable {
private int[] sequence;
private int length;
public FibonacciCalculator(int numElements) {
this.sequence = new int[numElements];
this.length = numElements;
}
@Override
public void run() {
if (length <= 0) return;
if (length <= 2) {
sequence[length - 1] = length <= 1 ? 0 : 1;
} else {
sequence[0] = 0;
sequence[1] = 1;
for (int i = 2; i < length; i++) {
sequence[i] = sequence[i - 1] + sequence[i - 2];
}
}
}
public void printSequence() {
System.out.println(Arrays.toString(sequence));
}
public static void main(String[] args) {
if (args.length != 1 || !isPositiveInteger(args[0])) {
System.out.println("Usage: Fibonacci <positive integer>");
return;
}
int numElements = Integer.parseInt(args[0]);
FibonacciCalculator calculator = new FibonacciCalculator(numElements);
new Thread(calculator).start();
try {
calculator.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
calculator.printSequence();
}
private static boolean isPositiveInteger(String str) {
try {
Integer.parseInt(str);
return str.chars().allMatch(Character::isDigit) && str.charAt(0) != '-';
} catch (NumberFormatException e) {
return false;
}
}
}
```
这个重构版做了以下改进:
1. 将`FibThread`类拆分为`FibonacciCalculator`,并移除了冗余的if-else结构,简化了计算过程。
2. 添加`printSequence`方法,以便于在主线程中直接打印结果。
3. `main`方法检查输入参数,现在只有一个要求:正整数。同时,增加了一个辅助方法`isPositiveInteger`来验证输入。
4. 保持了计算逻辑的清晰性和可读性。
阅读全文