Java 如何获取用户输入(args)并将其传递给集合获取方法
我发现了一个进行IRR计算的开源Java代码。我想将此整合到我的计划中。其思想是向java程序输入一些金额和日期,然后计算IRR并返回一个数字(双精度)。程序将collection类作为输入(数字和日期的组合),然后返回数字。它可以根据用户需要使用任意数量的数字和日期。文档中有一些示例代码,但它们都显示了该程序如何在硬编码的代码中获取参数。我正在尝试更改它,因此程序将用户输入解析为数字和日期,然后理想地将它们转换为集合并将其传递给java程序。我做不到。我无法从用户输入创建集合对象并将其传递给程序。我附加了一个示例代码,用于实现代码中硬编码的值,我只想编写一个类来动态捕获用户输入(值和日期的组合,理想情况下是一个值、一个日期等等),并将其传递给XIRR方法Java 如何获取用户输入(args)并将其传递给集合获取方法,java,collections,args,Java,Collections,Args,我发现了一个进行IRR计算的开源Java代码。我想将此整合到我的计划中。其思想是向java程序输入一些金额和日期,然后计算IRR并返回一个数字(双精度)。程序将collection类作为输入(数字和日期的组合),然后返回数字。它可以根据用户需要使用任意数量的数字和日期。文档中有一些示例代码,但它们都显示了该程序如何在硬编码的代码中获取参数。我正在尝试更改它,因此程序将用户输入解析为数字和日期,然后理想地将它们转换为集合并将其传递给java程序。我做不到。我无法从用户输入创建集合对象并将其传递给程
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次。你能将我的问题标记为已回答吗?我不确定这里的评论是否回答了你的问题。”。