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

时间:2013-02-01 20:33:02

标签: java variables loops

我有一段令我困惑的代码。我在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 个答案:

答案 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创建数组。而不是迭代到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命名约定。方法名称应以小写字母开头。

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