/
onequ1z
/
JavaCoursePaperTulSU
Обзор
Документация
Войти
/
onequ1z
/
JavaCoursePaperTulSU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/ru/dmitry/montecarlo/util/CsvExporter.java
64 строки
3 KB
tayno
fix: Исправлены грубые ошибки при рассчёте площади треугольника и прямоугольника. Подобраны максимально подходящие координаты для фигур ABCD и GEF. Исправлены тесты
08 дек 2025, 10:22
08 дек 2025, 10:22
dbf7c5e
Код
Авторство
О чём код?
package ru.dmitry.montecarlo.util; import ru.dmitry.montecarlo.model.ExperimentResult; import ru.dmitry.montecarlo.model.MonteCarloResult; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * Утилита для экспорта результатов экспериментов Монте-Карло в CSV формат. */ public class CsvExporter { /** * Экспортирует результаты экспериментов в CSV файл. * <p> * Формат CSV: * <ul> * <li>Заголовок: N,Run,Hits,EstimatedArea,ExactArea,RelativeError,DurationMs</li> * <li>Каждая строка содержит данные одного запуска</li> * </ul> * * @param experimentResult результаты экспериментов * @param exactArea точная площадь фигуры (используется для всех строк) * @param outputFile путь к выходному CSV файлу * @throws IOException если произошла ошибка при записи файла */ public static void exportToCsv(ExperimentResult experimentResult, double exactArea, String outputFile) throws IOException { if (experimentResult == null) { throw new IllegalArgumentException("ExperimentResult не может быть null"); } if (outputFile == null || outputFile.trim().isEmpty()) { throw new IllegalArgumentException("Путь к файлу не может быть пустым"); } try (PrintWriter writer = new PrintWriter(new FileWriter(outputFile))) { // Записываем заголовок writer.println("N,Run,Hits,EstimatedArea,ExactArea,RelativeError,DurationMs"); // Записываем данные для каждого запуска // Используем Locale.US для гарантии использования точки в десятичных числах java.util.Locale.setDefault(java.util.Locale.US); for (ExperimentResult.NStats stats : experimentResult.getStatsPerN()) { MonteCarloResult[] runs = stats.getRuns(); for (int i = 0; i < runs.length; i++) { MonteCarloResult run = runs[i]; // Используем String.format с Locale.US для гарантии точки в десятичных числах writer.printf(java.util.Locale.US, "%d,%d,%d,%.10f,%.10f,%.10f,%d%n", stats.getSamples(), // N (i + 1), // Run run.getHits(), // Hits run.getEstimatedArea(), // EstimatedArea exactArea, // ExactArea run.getRelativeErrorPercent(), // RelativeError run.getDurationMillis() // DurationMs ); } } } } }