如果你做了一定的时间,然后中断这个过程,你有一个有趣的问题要回答:
我会让你思考这个问题,同时我会建议你如何打断仍在计算中的答案。
首先,您应该提前知道平方根的前 50 位数字,因为您需要这些数字才能“知道”答案是否正确。正确性应该与需要多长时间无关,所以也许您只需验证一次计算,然后硬编码正确的答案。
其次,您需要将平方根计算算法打包到可以运行的东西中。我建议使用 Java 接口 Runnable,它强制使用带有签名的方法
public void run() {
// your code goes here
}
然后您将拥有可以与 Java Thread 很好地融合的东西,并且您可以中断 Java 线程。一旦中断了线程的结果,就不能信任线程内部的任何计算(正常情况下)。
最简单的方法(因为你的项目不是利用最新的 Java 技术,而是试图反驳你的反假设)是做类似的事情
Thread solution1 = new Thread(new Runnable1());
solution1.start();
稍后如果您发现某些事情花费的时间太长
Thread.sleep(10000); // sleeps the current thread 10 seconds
solution1.interrupt();
请注意,这是一种非常不雅的方式来停止线程,并且您不能信任 Runnable1 之后所做的任何事情。
还有其他更复杂的技术可用,例如:
public class Runnable1 implements Runnable {
private boolean running;
public Runnable1() {
running = false;
}
public void run() {
running = true;
while (running) {
// do one step of your computation
}
}
public void shutdown() {
running = false;
}
}
上面的例子有很多特性确实可以提高 Java 代码的质量;但是,请注意,代码的质量与证明您的观点无关。有可能把代码打磨得很好,忘记真正解决问题。
上面的代码会被调用
Runnable1 runnable1 = new Runnable1();
Thread thread1 = new Thread(runnable1);
thread1.start
// some means of waiting
Thread.sleep(10000); // sleeps 10 seconds
runnable1.shutdown();
此技术会在已知状态下(在下一次循环迭代之前)关闭您的可运行文件,因此您可能随后可以从该技术中捕获一些中间数据,前提是 Runnable 的其余部分可以报告中间解决方案。