У меня есть 3 метода и для каждого прописаны одни и те же участки кода. как сократить данный участок кода?
double n = COUNT;
while (Math.abs(rectangleMethod(a, b, 2 * n) - rectangleMethod(a, b, n)) > EXACTNESS) {
n *= 2;
}
System.out.print("Rectangle method: n = " + n + ": ");
System.out.println(rectangleMethod(a, b, n));
n = COUNT;
while (Math.abs(trapezoidMethod(a, b, 2 * n) - trapezoidMethod(a, b, n)) > EXACTNESS) {
n *= 2;
}
System.out.print("Trapezoid method: n = " + n + ": ");
System.out.println(trapezoidMethod(a, b, n));
n = COUNT;
while (Math.abs(simpsonFormul(a, b, 2 * n) - simpsonFormul(a, b, n)) > EXACTNESS) {
n *= 2;
}
System.out.print("Simpson method: n = " + n + ": ");
System.out.println(simpsonFormul(a, b, n));, b, n));
Не совсем знаю, как у вас устроен ваш код, но вот, к примеру, как можно сократить
Интерфейс метода
interface Method {
double calc(double a, double b, double c);
}
Соответвенно вам нужно будет реализовать классы для ваших трех типов вычислений(к примеру SimpsonMethod
и т.д.)
И добавить класс обработки, наподобии
class Calc {
private final static double EXACTNESS = 100;
private final static double COUNT = 0;
private Method method;
public Calc(Method method) {
this.method = method;
}
double doMethod(double a, double b) {
double n = COUNT;
while (Math.abs(method.calc(a, b, 2 * n) - method.calc(a, b, n)) > EXACTNESS) {
n *= 2;
}
System.out.print(method.getClass().getSimpleName() + " method: n = " + n + ": ");
return n;
}
}
И вызов, соответсвенно, будет наподобии:
new Calc(new SimpsonMethod()).doMethod(a, b);
И так для каждого из методов(реализаций интерфейса Method)
Да, метод в качестве параметра передать можно.
@FunctionalInterface
interface TriFunction<F, S, T, R> {
R apply(F first, S second, T third);
}
class SomeClass {
public static double rectangleMethod(int x, int y, double z) {
return 1;
}
public static double trapezoidMethod(int x, int y, double z) {
return 2;
}
public static double simpsonFormul(int x, int y, double z) {
return 3;
}
}
public class Demo {
private static final int COUNT = 42;
private static final int EXACTNESS = 0;
private static void someMethod(TriFunction<Integer, Integer, Double, Double> function, int a, int b) {
double n = COUNT;
while (Math.abs(function.apply(a, b, 2 * n) - function.apply(a, b, n)) > EXACTNESS) {
n *= 2;
}
System.out.format("Результат %.2f при n = %.2f%n", function.apply(a, b, n), n);
}
public static void main(String[] args) {
System.out.print("Rectangle method: ");
someMethod(SomeClass::rectangleMethod, 1, 2);
System.out.print("Trapezoid method: ");
someMethod(SomeClass::trapezoidMethod, 1, 2);
System.out.print("Simpson method: ");
someMethod(SomeClass::simpsonFormul, 1, 2);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть приложение на androidЕсть реклама за вознаграждения (использую appodeal) В слушателе такой код
Нужна помощь, как в процессе ввода записать все стрелки в строку, и вывести их в консоль после цикла ?
Как изменить ориентацию игры LibGDX на вертикальную?