循环内定义的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
来创建数组。 而不是迭代到L1
或L2
,你应该迭代直到数组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; }
- 如何构造和使用TimeSeriesCollections
- 如何在循环引用中使用@JsonIdentityInfo?
- jar子没有复制到Tomcat的lib文件夹
- Struts2.3.12 junit4 testcase请求和会话为空
- 如何确定数据结构的实际内存使用情况
- 错误:org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型’text / plain; charset = UTF-8′
- java.lang.StringIndexOutOfBoundsException:字符串索引超出范围
- 来自并行流中的I / O代码的SecurityException
- 选择combobox上的项目时执行操作