Java 第一个调用方法中的语句不会按原样运行
这是我的密码Java 第一个调用方法中的语句不会按原样运行,java,Java,这是我的密码 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 desir
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");
}
}
}
但在不打印“hi”的情况下,编译器会执行在第一个调用方法中调用的其他方法,并在下一个调用中打印“hi”。我使用“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
时,问题就出现了。平衡重根本不应该调用calculate。它应该是(伪代码)
另外,将非整数与
==
组合将不起作用。请查看请检查错误的值/计算/更新,它在您的输出中为0.5
,并且不会随时间变化(至少在显示的输出中)。这意味着您将反复转到calculate()
,calculateError()
,checkingCondition()
,balanceWeights()
和calculate()
。这将导致给定的堆栈溢出错误
您知道如何使用调试器吗?将浮点与==
进行比较,您需要检查,感谢它成功。谢谢您,我没有看到,我用注释的链接解决了我的问题
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)
set initial weights();
while(currentError>=required){
checkConfitions();
balanceWeigth();
calculate();
}