将来自两个不同代理的数组相乘会产生空指针异常;为什么?
Multiplying Arrays from Two Different Agents yields NullPointException; why?
我有两个代理群体,AgentAs[..]
和 AgentBs[..]
。 AgentAs[]
的人口为 2,而 AgentBs[]
的人口为 100。每个 AgentB
通过将其数组与当前 AgentA
中的数组进行比较来评估每个 AgentA
检查(每个代理类型中的数组长度相等)。 AgentB
计算每个数组中对应元素的乘积之和,然后选择最大值为sumOfProducts
的AgentA
。
double[] Array_AgentA1 = new double[]{0.0, 1.0, 0.0};
double[] Array_AgentA2 = new double[]{0.0, 0.0, 1.0};
double[] Array_AgentB1 = new double[]{0.0, 0.85, 0.0};
double sumOfProducts = 0.0;
当我尝试遍历并对乘积求和时,我在这一行收到 NullPointerException:
for (int i=0; i<3; i++) {
sumOfProducts += Array_AgentA1[i] * Array_AgentB1[i];
}
导致错误的原因是什么?我不能将数组与零相乘吗?此时它们已经被声明并用零填充,所以它们不是空数组(我不认为)。不确定如何从这里评估问题(我不是最强的 java 程序员,所以这可能是这里的问题)。欢迎提出建议。谢谢
编辑:
sumOfProducts
是 AgentB
工作区中的一个变量。 Array_AgentB1
是在 AgentB
工作区中的函数中创建的数组。 Array_AgentA1
是 AgentA
工作区中的 double[]
类型参数,在生成 AgentA 时创建“启动时:”。
这就是问题所在
for (int i=0; i<3; i++) {
sumOfProducts += Array_AgentA1[i] * Array_AgentB2[i];
}
Array_AgentB2
未根据您的代码段声明。如果将其更改为 Array_AgentB1
,答案将是 0.85。
您的问题与变量调用和初始化有关;它与乘以零无关。如果您从代理 B 调用代理 A 参数,则应在循环中指定该参数。例如:agentAs.get(0).Array_AgentA1
.
在为代理的特定成员赋值时,您应该使用 this.variableName
。
我未能正确初始化 AgentA
中的数组参数。将参数类型更改为 double[]
后,我需要将 {0,0}
添加到初始值框中。 :-/
我有两个代理群体,AgentAs[..]
和 AgentBs[..]
。 AgentAs[]
的人口为 2,而 AgentBs[]
的人口为 100。每个 AgentB
通过将其数组与当前 AgentA
中的数组进行比较来评估每个 AgentA
检查(每个代理类型中的数组长度相等)。 AgentB
计算每个数组中对应元素的乘积之和,然后选择最大值为sumOfProducts
的AgentA
。
double[] Array_AgentA1 = new double[]{0.0, 1.0, 0.0};
double[] Array_AgentA2 = new double[]{0.0, 0.0, 1.0};
double[] Array_AgentB1 = new double[]{0.0, 0.85, 0.0};
double sumOfProducts = 0.0;
当我尝试遍历并对乘积求和时,我在这一行收到 NullPointerException:
for (int i=0; i<3; i++) {
sumOfProducts += Array_AgentA1[i] * Array_AgentB1[i];
}
导致错误的原因是什么?我不能将数组与零相乘吗?此时它们已经被声明并用零填充,所以它们不是空数组(我不认为)。不确定如何从这里评估问题(我不是最强的 java 程序员,所以这可能是这里的问题)。欢迎提出建议。谢谢
编辑:
sumOfProducts
是 AgentB
工作区中的一个变量。 Array_AgentB1
是在 AgentB
工作区中的函数中创建的数组。 Array_AgentA1
是 AgentA
工作区中的 double[]
类型参数,在生成 AgentA 时创建“启动时:”。
这就是问题所在
for (int i=0; i<3; i++) {
sumOfProducts += Array_AgentA1[i] * Array_AgentB2[i];
}
Array_AgentB2
未根据您的代码段声明。如果将其更改为 Array_AgentB1
,答案将是 0.85。
您的问题与变量调用和初始化有关;它与乘以零无关。如果您从代理 B 调用代理 A 参数,则应在循环中指定该参数。例如:agentAs.get(0).Array_AgentA1
.
在为代理的特定成员赋值时,您应该使用 this.variableName
。
我未能正确初始化 AgentA
中的数组参数。将参数类型更改为 double[]
后,我需要将 {0,0}
添加到初始值框中。 :-/