3

我有一段代码让我感到困惑。我在 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无法解析为变量的语句。

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

4

4 回答 4

5

定义outputbeforeif语句。像这样:

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;
}

当您outputif语句中声明时,它仅具有该块范围。

于 2013-02-01T20:33:54.813 回答
3

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

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

于 2013-02-01T20:34:49.840 回答
2

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

您可以conditional operators根据L1 > L2. 而不是迭代直到L1or L2,您应该迭代直到 array 的长度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 命名约定。方法名称应以小写字母开头。

于 2013-02-01T20:40:29.077 回答
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;
}
于 2013-02-01T20:38:40.780 回答