Если вы делаете определенное количество времени, а затем прервать процесс, у вас есть интересный вопрос, чтобы ответить:
- ли вы собрать достаточно данных, чтобы ответить на этот вопрос?
Я позволю вам задуматься над этим вопросом, в то время как я предлагаю, как вы могли бы прервать все еще расчетный ответ.
Прежде всего, вы должны заранее знать первые пятьдесят цифр вашего квадратного корня, так как вам понадобится «знать», если ответ правильный. Правильность должна быть независимой от того, сколько времени потребуется, поэтому, возможно, вы просто проверите расчет один раз, а затем скорректируйте правильный ответ.
Во-вторых, вам нужно упаковать ваши алгоритмы расчета квадратного корня в то, что можно запустить. Я хотел бы предложить, что интерфейс Java Runnable
, который заставляет метод с подписью
public void run() {
// your code goes here
}
Тогда вы будете иметь то, что будет хорошо гармонировать с Java Thread
и вы можете прервать Java потоки. После прерывания результатов Thread, вы не можете доверять никаким вычислениям из потока (при нормальных обстоятельствах).
Самый простой способ (и так как ваш проект не об усилении новейших 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
имеет средство для сообщения промежуточного решения.
Пожалуйста, покажите нам свои усилия до сих пор - что вы пытались решить проблему. – Lion
(Боком мысли) Рассчитайте свой корень один раз, а затем проверьте его цифры тысячу раз. Разделите это время на 1000, и вы знаете, сколько стоит проверка. (About-ish. Остерегайтесь проблем с кешированием - вы делаете * не * хотите сравнить один запуск либо с eachother.) – usr2564301