2016-12-01 25 views
0

我通過運行下面的代碼得到一個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; 
} 

}

類節點{

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)); 
} 

}

類層{

double layerBias; 
Node[] nodes; 

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

}

在線「層中的錯誤點[0] =新層(inputNodes );」在NeuralNetwork類中。沒有紅色顯示,也沒有任何警告......

我認爲這是一個錯誤,因爲缺乏關於JVM如何工作的知識。 直到現在我已經嘗試將它們的類分離成單獨的文件中的公共類,這沒有幫助(不期待它)。我沒有嘗試過其他任何東西。 有什麼想法? 在此先感謝!

+0

我傻:\是現在,我看到它,它可能解決其他的答案,但我認爲這會有所不同。我會刪除它!謝謝! –

回答

1

您需要初始化數組Layer layers = new Layer[3];

0

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