Java 如何获取用户输入(args)并将其传递给集合获取方法

Java 如何获取用户输入(args)并将其传递给集合获取方法,java,collections,args,Java,Collections,Args,我发现了一个进行IRR计算的开源Java代码。我想将此整合到我的计划中。其思想是向java程序输入一些金额和日期,然后计算IRR并返回一个数字(双精度)。程序将collection类作为输入(数字和日期的组合),然后返回数字。它可以根据用户需要使用任意数量的数字和日期。文档中有一些示例代码,但它们都显示了该程序如何在硬编码的代码中获取参数。我正在尝试更改它,因此程序将用户输入解析为数字和日期,然后理想地将它们转换为集合并将其传递给java程序。我做不到。我无法从用户输入创建集合对象并将其传递给程

我发现了一个进行IRR计算的开源Java代码。我想将此整合到我的计划中。其思想是向java程序输入一些金额和日期,然后计算IRR并返回一个数字(双精度)。程序将collection类作为输入(数字和日期的组合),然后返回数字。它可以根据用户需要使用任意数量的数字和日期。文档中有一些示例代码,但它们都显示了该程序如何在硬编码的代码中获取参数。我正在尝试更改它,因此程序将用户输入解析为数字和日期,然后理想地将它们转换为集合并将其传递给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;
}

需要注意的是,您提到的开源包中的XIRR实现具有
公共XIRR(Transaction…tx){
,这(如果您不熟悉var args)意味着您可以拥有任意数量的事务元素。它还允许您输入数组。XIRR还可以接收集合(如ArrayList)因此我在以下代码中所做的是:

  • 创建一个
    扫描仪
    以读取用户输入
  • 创建日期格式化程序以将字符串转换为日期
  • 创建保存事务的
    ArrayList
  • 基于用户输入的迭代计数器
  • 一种
    for
    循环,循环用户预定义的
    迭代次数
    数量,并向
    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;
}
//导入java.text.simpleDataFormat;
//导入java.util.ArrayList;
//导入java.util.Date;
//导入java.util.Scanner;
公共双保险发行5b(){
SimpleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd”);
扫描仪sc=新的扫描仪(System.in);
ArrayList trans=新的ArrayList();
int迭代次数=sc.nextInt();
for(int k=0;k
需要注意的是,您提到的开源软件包中的XIRR实现具有
公共XIRR(Transaction…tx){
,这(如果您不熟悉var args)意味着您可以拥有任意数量的事务元素。它还允许您在数组中输入。XIRR还可以接收集合(如ArrayList)因此我在以下代码中所做的是:

  • 创建一个
    扫描仪
    以读取用户输入
  • 创建日期格式化程序以将字符串转换为日期
  • 创建保存事务的
    ArrayList
  • 基于用户输入的迭代计数器
  • 一种
    for
    循环,循环用户预定义的
    迭代次数
    数量,并向
    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;
}
//导入java.text.simpleDataFormat;
//导入java.util.ArrayList;
//导入java.util.Date;
//导入java.util.Scanner;
公共双保险发行5b(){
SimpleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd”);
扫描仪sc=新的扫描仪(System.in);
ArrayList trans=新的ArrayList();
int迭代次数=sc.nextInt();
for(int k=0;k
谢谢,看起来是个不错的方法。我不明白你是如何使用sc.nextInt来限制for循环的。它不返回字符串中的下一个整数吗?不。nextInt类似于,“嘿,伙计,你输入了int吗?是吗?好吧,让我们通过integer.parseInt()将int的字符串值转换为整数。”.否?不是int?好吧,让我们抛出inputmistmatcherror。回想起来,如果有人没有首先输入要输入的值日期数,我应该对此进行解释。就像我键入“hi”一样"然后它会说不,然后退出程序。如果我想要10个事务,那么我会键入10,然后键入10次。你也可以将我的问题标记为已回答吗?我不确定这里的评论是否回答了你的问题。谢谢,看起来是个好方法。我不明白你是如何使用sc.nextInt来限制for循环的。它不会返回ne吗字符串中的xt integer?Nope.nextInt类似于“嘿,伙计,你输入了整数吗?是吗?好吧,让我们通过integer.parseInt()将整数的字符串值转换为整数。”.否?不是int?好吧,让我们抛出inputmistmatcherror。回想起来,如果有人没有首先输入要输入的值日期数,我应该对此进行解释。就像我键入“hi”一样“然后它会说不,然后退出程序。如果我想要10个事务,那么我会键入10,然后再键入10次。你能将我的问题标记为已回答吗?我不确定这里的评论是否回答了你的问题。”。