2016-01-13 25 views
0

這是我的代碼報表不運行,因爲它是

import java.lang.Math; 

public class Demo { 

    // inputs are declared 
    private int x[]={1,0,1,0}; 
    //weights are declared 
    private double w[]={0.4,0.6,0.7,0.8}; 
    private double temp; 

    private double z=0; 
    private int desiredOutput=0; 

    private double actualOutput=0; 
    private double error=0; 
    private double definedValue=0.004; 
    private double weightChange[]={0,0,0,0}; 
    private double learningRate=0.7; 

    public void calculate(){ 
     System.out.println("hi"); 

     for(int i=0; i<w.length; i++){ 
      temp=0; 
      temp=x[i]*w[i]; 
      z+=temp; 
      System.out.println("Z value"+z); 
     } 

     actualOutput=1/(1+Math.exp(-z)); 

     System.out.println("actualOutput "+actualOutput); 

     if(actualOutput!=desiredOutput){ 
      calculateError(); 
     } 
     else{ 
      printWeights(); 
     } 
    } 
    public void calculateError(){ 
     error=0.5*(desiredOutput-actualOutput)*(desiredOutput-actualOutput); 
     System.out.println("error "+error); 
     checkingCondition(); 
     //error=0.003; 
    } 
    public void checkingCondition(){ 
     if(error<definedValue){ 
      printWeights(); 
     } else { 
      balanceWeights(); 
     } 
    } 

    public void balanceWeights(){ 
     for(int i=0;i<w.length;i++){ 

      weightChange[i]=((-learningRate)*(desiredOutput-actualOutput)*actualOutput*(1-actualOutput)*x[i]); 
      System.out.println(weightChange[i]); 
      w[i]=w[i]+weightChange[i]; 
     } 
     calculate(); 
    } 

    public void printWeights(){ 
     System.out.print("The balanced weights are:"); 

     for(int i=0;i<4;i++){ 
      System.out.print(w[i]+"\t"); 
     }  
    } 
} 

這是我的主類

public class Main { 

    public static void main(String[] args) { 
     Demo object= new Demo(); 
     object.calculate(); 
    } 

} 

但沒有打印出「你好」,我用來檢查運行第一種方法的運行路徑,編譯器執行在第一個調用方法中調用的其他方法,並在下一次調用時打印「hi」

這是輸出的初始部分我得到

Z value1543.3571456014363 
Z value1544.2242990218328 
Z value1544.2242990218328 
actualOutput 1.0 
error 0.5 
0.0 
0.0 
0.0 
0.0 
hi 
Z value1544.7914524422295 
Z value1544.7914524422295 
Z value1545.658605862626 
Z value1545.658605862626 
actualOutput 1.0 
error 0.5 
0.0 
0.0 
0.0 
0.0 
hi 
Z value1546.2257592830226 
Z value1546.2257592830226 
Z value1547.0929127034192 
Z value1547.0929127034192 
actualOutput 1.0 
error 0.5 
0.0 
0.0 
0.0 
0.0 
hi 
Z value1547.66006612 

在在輸出的最後一部分這些錯誤給

hi 
Z value1861.77326425752 
Z value1861.77326425752 
Z value1862.6404176779165 
Z value1862.6404176779165 
actualOutput 1.0 
Exception in thread "main" java.lang.StackOverflowError 
    at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.dtoa(FloatingDecimal.java:431) 
    at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.access$100(FloatingDecimal.java:259) 
    at sun.misc.FloatingDecimal.getBinaryToASCIIConverter(FloatingDecimal.java:1785) 
    at sun.misc.FloatingDecimal.getBinaryToASCIIConverter(FloatingDecimal.java:1738) 
    at sun.misc.FloatingDecimal.appendTo(FloatingDecimal.java:89) 
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:709) 
    at java.lang.StringBuilder.append(StringBuilder.java:226) 
    at Neural4.Demo.calculateError(Demo.java:55) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 
    at Neural4.Demo.checkingCondition(Demo.java:68) 
    at Neural4.Demo.calculateError(Demo.java:56) 
    at Neural4.Demo.calculate(Demo.java:41) 
    at Neural4.Demo.balanceWeights(Demo.java:84) 

爲什麼會這樣,當變量desiredOutput設置爲1代碼運行正常,當它被設置爲問題就來了0

+0

你知道如何使用調試器嗎? – Andremoniy

+0

比較浮點與'=='你需要檢查http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java – Antoniossss

+0

謝謝它得到了工作 –

回答

1

請檢查error的值/計算/更新,它在您的輸出中爲0.5,並且不隨時間變化(至少在呈現的輸出中)。這意味着,您將一次又一次地去到calculate(),calculateError(),checkingCondition(),balanceWeights()calculate()。這導致給定StackOverflowError

+0

Thankyou我沒有看到,我解決了我的問題與鏈接評論http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java –

相關問題