如何将返回的数组重新分配给java中预先存在的数组
这是代码,sigmoid和dot方法返回一个2d数组。在sigmoid和dot方法中,名为如何将返回的数组重新分配给java中预先存在的数组,java,arrays,multidimensional-array,initialization,return,Java,Arrays,Multidimensional Array,Initialization,Return,这是代码,sigmoid和dot方法返回一个2d数组。在sigmoid和dot方法中,名为outputs的数组定义如下:double[][]输出=新的双[size1][size2],并返回返回输出 代码中的这一部分返回错误“变量输出可能尚未初始化”,这是由这段代码引起的System.out.println(“培训后的输出为:”+Arrays.toString(输出)) double[][] outputs; for(int i = 0; i < 1; i++){ inputLaye
outputs
的数组定义如下:double[][]输出=新的双[size1][size2]代码>,并返回返回输出代码>
代码中的这一部分返回错误“变量输出可能尚未初始化”,这是由这段代码引起的
System.out.println(“培训后的输出为:”+Arrays.toString(输出))代码>
double[][] outputs;
for(int i = 0; i < 1; i++){
inputLayer = trainingInputs;
outputs = sigmoid(dot(inputLayer, synapticWeights));
}
System.out.println("Outputs after training are: " + Arrays.toString(outputs));
double[][]输出;
对于(int i=0;i<1;i++){
输入层=训练输入;
输出=sigmoid(点(输入层,synapticWeights));
}
System.out.println(“培训后的输出为:”+array.toString(输出));
我想消除这个错误,这样数组输出可以打印到控制台中 您已经声明了一个变量输出,它可能会在for循环中初始化。您应该在声明时用null初始化它。您的代码应该是这样的。下面的代码片段:
double[][] outputs = null;
for(int i = 0; i < 1; i++){
inputLayer = trainingInputs;
outputs = sigmoid(dot(inputLayer, synapticWeights));
}
System.out.println("Outputs after training are: " + Arrays.toString(outputs));
double[][]输出=null;
对于(int i=0;i<1;i++){
输入层=训练输入;
输出=sigmoid(点(输入层,synapticWeights));
}
System.out.println(“培训后的输出为:”+array.toString(输出));
问题不在于你怎么想
您正在以正确的方式分配数组。真正的问题是Java编译器认为代码并不总是为输出赋值。(这就是编译错误的实际含义…)
为什么?
有两种方法可以考虑这一点:
- 直观地说,编译器无法找出
for(inti=0;i<1;i++){…}
总是至少运行一次
- 技术上正确的解释是,JLS明确分配规则并未说明
输出在使用前已明确分配。处理这个问题
以下是两种可能的修复方法:
- 显式初始化变量
double[][] outputs = null;
for(int i = 0; i < 1; i++){
inputLayer = trainingInputs;
outputs = sigmoid(dot(inputLayer, synapticWeights));
}
System.out.println("Outputs after training are: " + Arrays.toString(outputs));
谢谢,我需要循环供以后使用,这非常有用。
double[][] outputs;
inputLayer = trainingInputs;
outputs = sigmoid(dot(inputLayer, synapticWeights));
System.out.println("Outputs after training are: " + Arrays.toString(outputs));