public class PrimeFinder implements Runnable {
Thread go;
StringBuffer primes = new StringBuffer();
int time = 0;
public PrimeFinder() {
start();
while (primes != null) {
System.out.println(time);
try {
Thread.sleep(1000);
} catch(InterruptedException exc) {
// do nothing
}
time++;
}
}
public void start() {
if (go == null) {
go = new Thread(this);
go.start();
}
}
public void run() {
int quantity = 1_000_000;
int numPrimes = 0;
// candidate: the number that might be prime
int candidate = 2;
primes.append("\nFirst ").append(quantity).append(" primes:\n\n");
while (numPrimes < quantity) {
if (isPrime(candidate)) {
primes.append(candidate).append(" ");
numPrimes++;
}
candidate++;
}
System.out.println(primes);
primes = null;
System.out.println("\nTime elapsed: " + time + " seconds");
}
public static boolean isPrime(int checkNumber) {
double root = Math.sqrt(checkNumber);
for (int i = 2; i <= root; i++) {
if (checkNumber % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] arguments) {
new PrimeFinder();
}
}
正如标题所说,我没有在控制台中得到程序的最终结果。。。计时器会一直计数,直到计算完成,但是当程序应该打印出结果时,控制台会清除并变为空白。我试着在某种在线编译器中输入代码,果然,最终结果打印出来了。有没有人遇到过类似的问题?如果有,你是如何解决的?提前谢谢!
2条答案
按热度按时间63lcw9qa1#
如果你启动线程而不是仅仅执行示例化,也许它会打印出一些东西。
tuwxkamq2#
我在intellij中尝试了这一点,并且输出被保留在控制台中——尽管正如您所指出的,当使用eclipse时,它并不是全部被保留。看起来eclipse可能会在切换线程时覆盖控制台。
您可以将输出写入一个文件并在那里查看它,当然这与将其保留在控制台中是不同的。为此,您可以转到“运行”>“运行配置…”,然后在“java应用程序”下选择应用程序,然后单击“公用”选项卡,然后在“标准输入和输出”下选中“输出文件”复选框,并输入日志的路径和文件名,然后应用。然后运行“runconfiguration”并查看文件中的输出。
如果在eclipse中的服务器(例如tomcat)上运行,您将进入服务器视图,双击您的服务器,单击openlaunchconfiguration,然后单击common,然后单击output file。在那里,您可以在文件系统或eclipse工作区中指定输出目标。