循环内定义的Java变量似乎在循环外不被识别?

我有一段令我困惑的代码。 我在if / else语句中定义了一个整数数组,因为数组的长度取决于方法的2个输入的长度。 我的问题是在if / else语句之外,变量定义似乎丢失了。

import java.util.Arrays; public class test { public String AddArrays(int [] arg1, int [] arg2) { int L1 = arg1.length; int L2 = arg2.length; if (L1 > L2) { int[] output = new int[L2]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg2[i]; } } else { int[] output = new int[L1]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg1[i]; } } String result = Arrays.toString(output); return result; } } 

我得到的错误是在语句String result = Arrays.toString(output); Eclipse告诉我output无法解析为变量。

…顺便说一句,是的,我知道这不是添加两个整数数组的方法 – 我从更复杂的代码中减少了这个来演示问题!

if语句之前定义output 。 喜欢这个:

 int[] output; int L1 = arg1.length; int L2 = arg2.length; if (L1 > L2) { output = new int[L2]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg2[i]; } } else { output = new int[L1]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg1[i]; } } String result = Arrays.toString(output); return result; } 

当你在if语句中声明output ,它只是只有那个块作用域。

变量的范围始终是下一个封闭的{ }

原因是从它的声明开始(而不是在{

好吧,你已经有了解决方案,但我想指出,你可以减少你的方法,避免重复代码,你正在做的。

您可以根据L1 > L2的结果使用conditional operators来创建数组。 而不是迭代到L1L2 ,你应该迭代直到数组output的长度。

因此,您可以尝试使用以下代码: –

 public String addArrays(int [] arg1, int [] arg2) { int L1 = arg1.length; int L2 = arg2.length; int[] output = L1 > L2 ? new int[L2]: new int[L1]; for (int i = 0; i < output.length; i++) { output[i] = arg1[i] + arg2[i]; } return Arrays.toString(output); } 

请遵循Java命名约定。 方法名称应以小写字母开头。

您将输出变量声明为每个if / else语句中的局部变量。 要解决此问题,请先将其声明为外部然后调整并返回结果。 这使它保持在括号{ }之间的范围内。

 public String AddArrays(int [] arg1, int [] arg2) { int L1 = arg1.length; int L2 = arg2.length; int[] output; if (L1 > L2) { output = new int[L2]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg2[i]; } } else { output = new int[L1]; for (int i = 0; i < L2; i++) { output[i] = arg1[i] + arg1[i]; } } String result = Arrays.toString(output); return result; }