如何将返回的数组重新分配给 java 中预先存在的数组
How do I reassign a returned array to a preexisting array in java
这是代码,sigmoid 和 dot 方法 return 一个二维数组。在 sigmoid 和 dot 方法中,名为 outputs
的数组被定义为;
double[][] outputs = new double[size1][size2];
,并且 return 与 return outputs;
.
这段代码return中的错误"variable outputs might not have been initialized"是这段代码造成的;
System.out.println("Outputs after training are: " + Arrays.toString(outputs));
.
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));
我想消除错误,以便可以将数组 outputs
打印到控制台。
您已经声明了一个变量 outputs 它可能会在您的 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));
问题不是你想的那样
您正在以正确的方式分配数组。 真正的问题是Java编译器认为代码并不总是给outputs
赋值。 (这就是编译错误的实际含义......)
为什么?
有两种思考方式:
直觉上,编译器无法判断出循环体 for
for(int i = 0; i < 1; i++){...}
总是至少要 运行 一次。
技术上正确的解释是JLS 明确赋值规则并没有说outputs
在使用前已经明确赋值。 JLS Chapter 16 处理这个问题。
这里有两个可能的修复方法:
显式初始化变量。
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));
这是代码,sigmoid 和 dot 方法 return 一个二维数组。在 sigmoid 和 dot 方法中,名为 outputs
的数组被定义为;double[][] outputs = new double[size1][size2];
,并且 return 与 return outputs;
.
这段代码return中的错误"variable outputs might not have been initialized"是这段代码造成的;System.out.println("Outputs after training are: " + Arrays.toString(outputs));
.
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));
我想消除错误,以便可以将数组 outputs
打印到控制台。
您已经声明了一个变量 outputs 它可能会在您的 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));
问题不是你想的那样
您正在以正确的方式分配数组。 真正的问题是Java编译器认为代码并不总是给outputs
赋值。 (这就是编译错误的实际含义......)
为什么?
有两种思考方式:
直觉上,编译器无法判断出循环体 for
for(int i = 0; i < 1; i++){...}
总是至少要 运行 一次。
技术上正确的解释是JLS 明确赋值规则并没有说
outputs
在使用前已经明确赋值。 JLS Chapter 16 处理这个问题。
这里有两个可能的修复方法:
显式初始化变量。
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));