我有一段令我困惑的代码。我在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
无法解析为变量。
...顺便说一下,是的,我知道这不是添加两个整数数组的方法 - 我从更复杂的代码中减少了这个来演示问题!
答案 0 :(得分:5)
在output
语句之前定义if
。像这样:
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;
}
当你在output
语句中声明if
时,它只有那个块范围。
答案 1 :(得分:3)
变量的范围始终是下一个{
}
。
原因从其声明开始(而不是{
)
答案 2 :(得分:2)
嗯,你已经有了解决方案,但是我想指出一点,你可以减少你的方法,避免重复你目前正在做的代码。
您可以根据conditional operators
的结果使用L1 > L2
创建数组。而不是迭代到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命名约定。方法名称应以小写字母开头。
答案 3 :(得分:0)
您将输出变量声明为每个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;
}