ArrayList.get(index)没有返回变量?

时间:2014-06-11 22:34:12

标签: java arraylist java-8

我正在用Java编写神经网络,而且我在使用ArrayList.get()时没有返回变量。

    double train(ArrayList<Double> inputVector, double desiredOutput) {
    double result = output(inputVector);
    double error = desiredOutput - result;
    double delta = learningRate_ * error * result * (1.0 - result);
    for (int i = 0; i < outputLayer_.weights_.size(); i++) {
        outputLayer_.weights_.get(i).doubleValue() += delta * lastOutput_.get(i);
    }
    ArrayList<Double> hiddenDelta = new ArrayList<Double>();
    for (int j = 0; j < hiddenLayer_.size(); j++) {
        double HiddenDelta = delta * outputLayer_.weights_.get(j + 1) * lastOutput_.get(j + 1) * (1 - lastOutput_.get(j + 1));
        for (int l = 0; l < hiddenLayer_.get(j).weights_.size(); l++) {
            hiddenLayer_.get(j).weights_.get(l) += HiddenDelta * inputVector.get(l);
        }
    }

我得到的错误是在两个尝试+ =的行中,每个都在for循环中(第一个和第三个)它告诉我一个变量是预期的。我正在使用JDK 8和Intellij。我使用以下内容创建权重列表:

ArrayList<Double> weights_ = new ArrayList<Double>();

每个列表都以类似的形式初始化。

1 个答案:

答案 0 :(得分:5)

表达式outputLayer_.weights_.get(i).doubleValue()是readOnly。您无法为其指定值。

首先将其值放在变量中:

double newWeight = outputLayer_.weights_.get(i).doubleValue() + delta * lastOutput_.get(i);

然后分配新的计算值:

outputLayer_.weights_.set(i, newWeight);