使用异常修改了素数的程序,但无法在Eclipse中运行。为什么呢?
public class PrimeThreads {
public static void main(String[] arguments) {
PrimeThreads pt = new PrimeThreads(arguments);
}
public PrimeThreads(String[] arguments) {
PrimeFinder[] finder = new PrimeFinder[arguments.length];
for (int i = 0; i < arguments.length; i++) {
try {
long count = Long.parseLong(arguments[i]);
finder[i] = new PrimeFinder(count);
System.out.println("Looking for prime " + count);
} catch (NumberFormatException nfe) {
System.out.println("Error: " + nfe.getMessage());
} catch (NegativeNumberException nne) {
System.out.println("Error: " + nne.getMessage());
}
}
boolean complete = false;
while (!complete) {
complete = true;
for (int j = 0; j < finder.length; j++) {
if (finder[j] == null) continue;
if (!finder[j].finished) {
complete = false;
} else {
displayResult(finder[j]);
finder[j] = null;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
// do nothing
}
}
}
private void displayResult(PrimeFinder finder) {
System.out.println("Prime " + finder.target
+ " is " + finder.prime);
}
}
运行之后,输出屏幕似乎什么也没发生,它应该不是。 OMG!
以下是PrimeFinder的代码:
public class PrimeFinder implements Runnable{
public long target;
public long prime;
public boolean finished = false;
private Thread runner;
PrimeFinder(long inTarget) throws NegativeNumberException {
if (inTarget < 0) {
NegativeNumberException nne = new NegativeNumberException("Negative numbers not allowed: " + inTarget);
throw nne;
}
target = inTarget;
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
public void run() {
long numPrimes = 0;
long candidate = 2;
while (numPrimes < target) {
if (isPrime(candidate)) {
numPrimes++;
prime = candidate;
}
candidate++;
}
finished = true;
}
boolean isPrime(long checkNumber) {
double root = Math.sqrt(checkNumber);
for (int i = 2; i <=root; i++) {
if (checkNumber % i == 0)
return false;
}
return true;
}
class NegativeNumberException extends Exception {
NegativeNumberException() {
super();
}
NegativeNumberException(String message) {
super(message);
}
}
}