显示NullPointerException的自定义类数组

时间:2016-12-01 14:34:56

标签: java arrays class nullpointerexception

我通过运行以下代码获得NullPointerException:

主:

public class NeuralXOR {

public static void main(String[] args) {
    double[] inputs = {1.0, 0.0};
    NeuralNetwork network = new NeuralNetwork(2, 1, 3, 0.7, 0.9);
}

}

神经网络课程: 公共类NeuralNetwork {

Node[] inputNodes;
Node[] hiddenNodes;
Node[] outputNodes;

Layer[] layers;

int noOfInputNodes;
int noOfOutputNodes;
int noOfLayers = 3;

public NeuralNetwork(int noOfInputNodes, int noOfOutputNodes, int noOfHiddenNodes, double learningRate, double momentum) {

    this.outputNodes = new Node[noOfOutputNodes];
    for (int i = 0; i < outputNodes.length; i++) {
        outputNodes[i] = new Node(i);
    }

    this.hiddenNodes = new Node[noOfHiddenNodes];
    for (int i = 0; i < hiddenNodes.length; i++) {
        hiddenNodes[i] = new Node(i);
    }

    this.inputNodes = new Node[noOfInputNodes];
    for (int i = 0; i < hiddenNodes.length; i++) {
        hiddenNodes[i] = new Node(i);
    }

    layers[0] = new Layer(inputNodes);
    layers[1] = new Layer(hiddenNodes);
    layers[2] = new Layer(outputNodes);

}

public void setInputs(double[] inputs) {
    if (inputs.length == this.inputNodes.length) {
        System.out.println(inputs.length);
        for (int i = 0; i < inputs.length; i++) {
            this.inputNodes[i].activation = inputs[i];
        }
    }
}

public double[] getOutputs() {
    double[] outputs = new double[this.outputNodes.length];
    for (Node outNode : this.outputNodes) {
        outputs[outNode.nodeNumber] = outNode.activation;
    }
    return outputs;
}

}

class Node {

int nodeNumber;
double sum; // z
double activation; //Output
double deltaNode;
double gradient;


double[] outWeights;

public Node (int nodeNumber) {
    this.nodeNumber = nodeNumber;
}

public void setOutWeights(int noOfOutNodes) {
    this.outWeights = new double[noOfOutNodes];
    for (int i = 0; i < outWeights.length; i++) {
        this.outWeights[i] = Math.random();
    }
}

public double sigmoid(double x) {
    return 1 / (1 + Math.pow(Math.E, -x));
}

}

class Layer {

double layerBias;
Node[] nodes;

public Layer (Node[] nodes) {
    this.nodes = nodes;
}

}

错误指向第&#34;层[0] =新层(inputNodes);&#34;在NeuralNetwork类中。没有红色显示也没有任何警告......

我认为由于缺乏有关JVM如何工作的知识而导致错误。 到目前为止,我已经尝试将这些课程分成不同文件中的公共课程,这些课程没有帮助(没有预料到)。我没有尝试过其他任何事情。 有什么想法吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您需要初始化数组Layer layers = new Layer[3];

答案 1 :(得分:0)

Layer[] layers对象未初始化,因此layers[0]不存在