Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将返回的数组重新分配给java中预先存在的数组_Java_Arrays_Multidimensional Array_Initialization_Return - Fatal编程技术网

如何将返回的数组重新分配给java中预先存在的数组

如何将返回的数组重新分配给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

这是代码,sigmoid和dot方法返回一个2d数组。在sigmoid和dot方法中,名为
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));