/
Swdevil
/
Mrakobesya
Обзор
Документация
Войти
/
Swdevil
/
Mrakobesya
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/montecarlo/App.java
70 строк
3 KB
Vorobina-Alina
first_commit
18 июн 2025, 14:41
18 июн 2025, 14:41
b3e9d2e
Код
Авторство
О чём код?
package com.montecarlo; import com.montecarlo.calculator.MonteCarloCalculator; import com.montecarlo.config.INIConfigParser; import com.montecarlo.figure.CompositeFigure; import com.montecarlo.figure.Point; import com.montecarlo.logging.AppLogger; import org.slf4j.Logger; import java.io.File; import java.io.IOException; import java.util.List; public class App { private static final Logger logger = AppLogger.getInstance(); public static void main(String[] args) { String configPath = "src/main/resources/config.ini"; logger.info("Конфигурационный файл: {}", new File(configPath).getAbsolutePath()); try { List<Point> vertices = INIConfigParser.loadPoints(configPath); List<Integer> iterations = INIConfigParser.getIterations(configPath); CompositeFigure figure = new CompositeFigure(vertices); double exactArea = figure.exactArea(); logger.info("Точная площадь фигуры: {:.4f}", exactArea); // Границы для генерации случайных точек double minX = vertices.stream().mapToDouble(p -> p.x).min().orElse(0); double maxX = vertices.stream().mapToDouble(p -> p.x).max().orElse(1); double minY = vertices.stream().mapToDouble(p -> p.y).min().orElse(0); double maxY = vertices.stream().mapToDouble(p -> p.y).max().orElse(1); MonteCarloCalculator calculator = new MonteCarloCalculator(figure, minX, maxX, minY, maxY); printTableHeader(); for (Integer iterationsCount : iterations) { MonteCarloCalculator.Result result = calculator.estimateArea(iterationsCount); printTableRow(iterationsCount, result); } printTableFooter(exactArea); } catch (IOException e) { logger.error("Ошибка чтения файла:", e); } catch (IllegalArgumentException e) { logger.error("Ошибка обработки данных:", e); } } private static void printTableHeader() { System.out.println("\nРезультаты метода Монте-Карло:"); System.out.println("+------------+-------------------+-------------------+------------+"); System.out.println("| Итерации | Приблизительная пл.| Относительная погр| Время (мс) |"); System.out.println("+------------+-------------------+-------------------+------------+"); } private static void printTableRow(int iterations, MonteCarloCalculator.Result result) { System.out.printf("| %-10d | %17.4f | %17.4f | %10d |\n", iterations, result.estimatedArea(), result.relativeError(), result.timeMs()); } private static void printTableFooter(double exactArea) { System.out.println("+------------+-------------------+-------------------+------------+"); System.out.printf("Точная площадь фигуры = %.4f\n", exactArea); } }