/
onequ1z
/
JavaCoursePaperTulSU
Обзор
Документация
Войти
/
onequ1z
/
JavaCoursePaperTulSU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/ru/dmitry/montecarlo/util/AppConfig.java
240 строк
8 KB
tayno
Добавлено безопциональная работа с N = 10 в 3,4,5,6,7 степени
08 дек 2025, 10:45
08 дек 2025, 10:45
d071cc0
Код
Авторство
О чём код?
package ru.dmitry.montecarlo.util; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Конфигурация приложения, полученная из аргументов командной строки. * Содержит все настройки для выполнения оценки площади методом Монте-Карло. */ public class AppConfig { private double rectX0 = 0.0; private double rectY0 = 0.0; private double rectX1 = 12.8; private double rectY1 = 4.0; private long singleN = 1000L; // По умолчанию используем experiment mode с N = 1000, 10000, 100000, 1000000, 10000000 private List<Long> nValues = new ArrayList<>(Arrays.asList(1000L, 10000L, 100000L, 1000000L, 10000000L)); private Long seed = null; // null означает случайный seed private String mode = "experiment"; // "quick" или "experiment" private boolean verbose = false; private int threads = 1; // количество потоков (по умолчанию 1 - однопоточный режим) private String outputFile = null; // путь к файлу для экспорта CSV (null означает отсутствие экспорта) /** * Возвращает минимальную X-координату прямоугольника. * * @return координата X0 */ public double getRectX0() { return rectX0; } /** * Устанавливает минимальную X-координату прямоугольника. * * @param rectX0 координата X0 */ public void setRectX0(double rectX0) { this.rectX0 = rectX0; } /** * Возвращает минимальную Y-координату прямоугольника. * * @return координата Y0 */ public double getRectY0() { return rectY0; } /** * Устанавливает минимальную Y-координату прямоугольника. * * @param rectY0 координата Y0 */ public void setRectY0(double rectY0) { this.rectY0 = rectY0; } /** * Возвращает максимальную X-координату прямоугольника. * * @return координата X1 */ public double getRectX1() { return rectX1; } /** * Устанавливает максимальную X-координату прямоугольника. * * @param rectX1 координата X1 */ public void setRectX1(double rectX1) { this.rectX1 = rectX1; } /** * Возвращает максимальную Y-координату прямоугольника. * * @return координата Y1 */ public double getRectY1() { return rectY1; } /** * Устанавливает максимальную Y-координату прямоугольника. * * @param rectY1 координата Y1 */ public void setRectY1(double rectY1) { this.rectY1 = rectY1; } /** * Возвращает одно значение N для быстрого режима. * * @return количество испытаний */ public long getSingleN() { return singleN; } /** * Устанавливает одно значение N для быстрого режима. * * @param singleN количество испытаний */ public void setSingleN(long singleN) { this.singleN = singleN; } /** * Возвращает список значений N для режима экспериментов. * * @return список значений N или null, если используется singleN */ public List<Long> getNValues() { return nValues; } /** * Устанавливает список значений N для режима экспериментов. * * @param nValues список значений N (null означает использование singleN) */ public void setNValues(List<Long> nValues) { this.nValues = nValues; } /** * Возвращает начальное значение генератора случайных чисел. * * @return seed или null, если используется случайный seed */ public Long getSeed() { return seed; } /** * Устанавливает начальное значение генератора случайных чисел. * * @param seed seed (null означает случайный seed) */ public void setSeed(Long seed) { this.seed = seed; } /** * Возвращает режим работы приложения. * * @return режим: "quick" или "experiment" */ public String getMode() { return mode; } /** * Устанавливает режим работы приложения. * * @param mode режим: "quick" или "experiment" */ public void setMode(String mode) { this.mode = mode; } /** * Проверяет, включено ли подробное логирование. * * @return true, если включено подробное логирование */ public boolean isVerbose() { return verbose; } /** * Устанавливает флаг подробного логирования. * * @param verbose true для включения подробного логирования */ public void setVerbose(boolean verbose) { this.verbose = verbose; } /** * Возвращает количество потоков для параллельного выполнения. * * @return количество потоков (по умолчанию 1) */ public int getThreads() { return threads; } /** * Устанавливает количество потоков для параллельного выполнения. * * @param threads количество потоков (должно быть > 0) */ public void setThreads(int threads) { if (threads <= 0) { throw new IllegalArgumentException("Количество потоков должно быть положительным числом"); } this.threads = threads; } /** * Возвращает путь к файлу для экспорта результатов в CSV. * * @return путь к файлу или null, если экспорт не требуется */ public String getOutputFile() { return outputFile; } /** * Устанавливает путь к файлу для экспорта результатов в CSV. * * @param outputFile путь к файлу (null означает отсутствие экспорта) */ public void setOutputFile(String outputFile) { this.outputFile = outputFile; } /** * Возвращает массив значений N для экспериментов. * Если задан --Ns, возвращает его. Иначе возвращает массив с одним значением singleN. */ public long[] getNValuesArray() { if (nValues != null && !nValues.isEmpty()) { long[] result = new long[nValues.size()]; for (int i = 0; i < nValues.size(); i++) { result[i] = nValues.get(i); } return result; } return new long[]{singleN}; } }