AnyLogic:计算集合中所有值的总和
AnyLogic: Calculating the sum of all values in a collection
我有一个基于代理的模拟,其中我有一个名为 collection_dailyInfection
的集合,其中包含每天出现的新感染数量。该集合看起来有点像这样:
- 第 1 天:0
- 第 2 天:3
- 第 4 天:3
- 第 5 天:6
- 第 6 天:1
- 。 . .
我现在正在尝试编写一个函数来计算任何特定日期的感染总数。例如:第 6 天 - 感染总数 = 0+3+3+6+1 = 13.
计算总和的语法是:
double sum( collection, value )
- Returns 给定集合中值的总和。
对于我的特定示例,这将是 double sum( collection_dailyInfection, *value*)
,但我不确定应该在 'value' 参数中放入什么。有人能帮帮我吗?
Value 应该是一个整数,它将表示您想要的感染总数的那一天。
例如,在这种情况下,value 的值应为 6。因为您想要直到第 6 天的感染总数。
这是您想要的工作演示
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<Integer> list;
Scanner sc=new Scanner(System.in);
list=new ArrayList<Integer>(); /* this list will hold all the values*/
int total=sc.nextInt(); /* total number of values in the list */
int value=sc.nextInt(); /* the day till which you want the total infection */
for(int i=0;i<total;i++) /*taking input in the list */
list.add(sc.nextInt());
double sum=calculateSum(list,value); /* function to compute sum*/
System.out.println(sum);
}
static double calculateSum(ArrayList<Integer> list,int value)
{
double sum=0.0;
for(int j=0;j<value;j++) /* calculates sum from day 1 till value*/
sum=sum+list.get(j);
return sum;
}
}
AnyLogic提供的这些用于计算集合统计信息的函数(方法)使用了Java的一个相当高级的特性:Java8中添加的函数式编程的东西。所以所需的语法不在很明显。主帮助页面(AnyLogic Help --> Parameters, Variables, Collections --> Collections --> Functions to collect statistics on a collection)有一个link到UtilitiesCollection
class 其中定义了这些方法。
您收集了 collection_dailyInfection
每日感染计数;假设您在 AnyLogic 中将此指定为集合 class ArrayList
,元素 class 为 int
,并且您使用循环事件在每个模拟日添加计数。
因此你的求和表达式应该是
sum( collection_dailyInfection, c -> c.doubleValue())
c
只是求和所在的当前元素的任意标识符(实际上这个求和方法在您的集合中循环),->
是一个特殊的 Java 8个函数式编程运算符。当您在 AnyLogic 中为您的集合内容指定类型 int
时,它们实际上存储为 Integer
对象,这些对象是 int
原语的对象版本。 (请参阅任何 Java 教科书以了解这一点。)
因此,每个条目(Integer
对象)都有一个方法doubleValue
,其中returns 整数值作为双精度值。 (AnyLogic 的 sum
函数需要 'value' 位为 double
;即实数(浮点数)。)
(anupam691997 的回答是忽略 AnyLogic 上下文的 'pure Java' 解决方案。)
我有一个基于代理的模拟,其中我有一个名为 collection_dailyInfection
的集合,其中包含每天出现的新感染数量。该集合看起来有点像这样:
- 第 1 天:0
- 第 2 天:3
- 第 4 天:3
- 第 5 天:6
- 第 6 天:1
- 。 . .
我现在正在尝试编写一个函数来计算任何特定日期的感染总数。例如:第 6 天 - 感染总数 = 0+3+3+6+1 = 13.
计算总和的语法是:
double sum( collection, value )
- Returns 给定集合中值的总和。
对于我的特定示例,这将是 double sum( collection_dailyInfection, *value*)
,但我不确定应该在 'value' 参数中放入什么。有人能帮帮我吗?
Value 应该是一个整数,它将表示您想要的感染总数的那一天。
例如,在这种情况下,value 的值应为 6。因为您想要直到第 6 天的感染总数。
这是您想要的工作演示
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<Integer> list;
Scanner sc=new Scanner(System.in);
list=new ArrayList<Integer>(); /* this list will hold all the values*/
int total=sc.nextInt(); /* total number of values in the list */
int value=sc.nextInt(); /* the day till which you want the total infection */
for(int i=0;i<total;i++) /*taking input in the list */
list.add(sc.nextInt());
double sum=calculateSum(list,value); /* function to compute sum*/
System.out.println(sum);
}
static double calculateSum(ArrayList<Integer> list,int value)
{
double sum=0.0;
for(int j=0;j<value;j++) /* calculates sum from day 1 till value*/
sum=sum+list.get(j);
return sum;
}
}
AnyLogic提供的这些用于计算集合统计信息的函数(方法)使用了Java的一个相当高级的特性:Java8中添加的函数式编程的东西。所以所需的语法不在很明显。主帮助页面(AnyLogic Help --> Parameters, Variables, Collections --> Collections --> Functions to collect statistics on a collection)有一个link到UtilitiesCollection
class 其中定义了这些方法。
您收集了 collection_dailyInfection
每日感染计数;假设您在 AnyLogic 中将此指定为集合 class ArrayList
,元素 class 为 int
,并且您使用循环事件在每个模拟日添加计数。
因此你的求和表达式应该是
sum( collection_dailyInfection, c -> c.doubleValue())
c
只是求和所在的当前元素的任意标识符(实际上这个求和方法在您的集合中循环),->
是一个特殊的 Java 8个函数式编程运算符。当您在 AnyLogic 中为您的集合内容指定类型 int
时,它们实际上存储为 Integer
对象,这些对象是 int
原语的对象版本。 (请参阅任何 Java 教科书以了解这一点。)
因此,每个条目(Integer
对象)都有一个方法doubleValue
,其中returns 整数值作为双精度值。 (AnyLogic 的 sum
函数需要 'value' 位为 double
;即实数(浮点数)。)
(anupam691997 的回答是忽略 AnyLogic 上下文的 'pure Java' 解决方案。)