将来自两个不同代理的数组相乘会产生空指针异常;为什么?

Multiplying Arrays from Two Different Agents yields NullPointException; why?

我有两个代理群体,AgentAs[..]AgentBs[..]AgentAs[] 的人口为 2,而 AgentBs[] 的人口为 100。每个 AgentB 通过将其数组与当前 AgentA 中的数组进行比较来评估每个 AgentA检查(每个代理类型中的数组长度相等)。 AgentB计算每个数组中对应元素的乘积之和,然后选择最大值为sumOfProductsAgentA

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 程序员,所以这可能是这里的问题)。欢迎提出建议。谢谢

编辑:

sumOfProductsAgentB 工作区中的一个变量。 Array_AgentB1 是在 AgentB 工作区中的函数中创建的数组。 Array_AgentA1AgentA 工作区中的 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} 添加到初始值框中。 :-/