как получить пользовательский ввод (аргументы) и передать его в метод получения коллекции - PullRequest
1 голос
/ 25 марта 2019

Я нашел код Java с открытым исходным кодом, который выполняет расчет IRR. Я хотел бы интегрировать это в мою программу. Идея состоит в том, чтобы ввести в эту Java-программу несколько сумм и дат, после чего она рассчитывает IRR и возвращает одно число (двойное). Программа исключает класс коллекции в качестве входных данных (комбинация чисел и дат), а затем возвращает число. Это может занять столько числа и даты, сколько хочет пользователь. В документации есть несколько примеров кода, но все они показывают, как эта программа получает параметры в жестко запрограммированном коде. Я пытаюсь изменить его, чтобы программа получала пользовательский ввод, анализировал его по числам и датам, а затем, в идеале, преобразовывал их в коллекцию и передавал в Java-программу. Я не мог этого сделать. Я не смог создать объект коллекции из пользовательского ввода и передал его в программу. Я прилагаю пример кода, который делает это значения жестко закодированными в коде, все, что я хочу написать класс, который будет динамически захватывать ввод пользователя (комбинация значения и даты, в идеале одно значение, одну дату и т. Д.) И передавать его в XIRR способ.

public double xirr_issue5b() {
    double rate = new Xirr(
        new Transaction(-2610, "2001-06-22"),
        new Transaction(-2589, "2001-07-03"),
        new Transaction(-5110, "2001-07-05"),
        new Transaction(-2550, "2001-07-06"),
        new Transaction(-5086, "2001-07-09"),
        new Transaction(-2561, "2001-07-10"),
        new Transaction(-5040, "2001-07-12"),
        new Transaction(-2552, "2001-07-13"),
        new Transaction(-2530, "2001-07-16"),
        new Transaction(-9840, "2001-07-17"),
        new Transaction(38900, "2001-07-18")
    ).xirr();
    return rate;
}

1 Ответ

0 голосов
/ 25 марта 2019

Следует отметить, что реализация XIRR в пакете с открытым исходным кодом, на который вы ссылаетесь, имеет public Xirr(Transaction... tx){, что (если вы не знакомы с аргументами var) означает, что вы можете иметь любое количество элементов транзакций.То, что он также позволяет вам для ввода в массиве.XIRR также может принимать коллекции (такие как ArrayLists). Итак, что я делаю в следующем коде:

  • создание Scanner для чтения в пользовательском вводе
  • Создание датысредство форматирования для преобразования строк в даты
  • создание ArrayList, содержащего транзакции
  • Счетчик итераций, основанный на пользовательском вводе
  • Цикл for, который зацикливает цикл iterations сумма, предопределенная пользователем и добавляющая новый Transaction к ArrayList каждой итерации с учетом следующей int и следующей строки пользователя (преобразованной в дату с помощью средства форматирования даты).
  • Я передаю ArrayListв метод Xirr.

Попробуйте это:

//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.Scanner;

public double xirr_issue5b() {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Scanner sc = new Scanner(System.in);
    ArrayList<Transaction> trans = new ArrayList<Transaction>();
    int iterations = sc.nextInt();

    for(int k = 0; k < iterations; k++) {
        trans.add(new Transaction(sc.nextInt(), format.parse(sc.next())));
    }

    double rate = Xirr(trans).xirr();
    sc.close();

    return rate;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...