[英]Java variable defined inside a loop doesn't seem to be recognized outside the loop?
我有一段代码令人困惑。 我在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
来创建数组。 而且,您应该迭代直到数组output
的长度,而不是迭代到L1
或L2
。
因此,您可以尝试使用以下代码:-
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.